Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

kriterium in abfrage über ein listenfeld mehrfachauswahl

Begonnen von jedoschmidt, November 24, 2015, 21:17:20

⏪ vorheriges - nächstes ⏩

jedoschmidt

Hallo ich bin am verzweifeln ich habe ein formular in dem ein listenfeld mit mehrfachauswahl (Produktliste) , ein Textfelt (ProduklisteTXT) in der ich das ergebnis des auslesens von Listenfeld Schreibe welches ich als zusätzliches kriterium für meine Abfrage nutzen will.

solange ich nur 1 ergebnis habe is alles gut somald ich jedoch mehrer Produkte auswähle bekomme ich einen Laufzeitfehler 3071


Private Sub Mischanlage_Click()

   Dim var As Variant
    Me.ProduklisteTXT = ""
    Dim str As String
    str = leer

    For Each var In Me.Produktliste.ItemsSelected
        If IsNull(var) = False And str <> "" Then str = str & " OR " & (var + 1)
        If IsNull(var) = False And str = "" Then str = var + 1
    Next var

    Me.ProduklisteTXT = str


On Error GoTo Err_Mischanlage_Click

    Dim stDocName As String

    stDocName = "teilauswertung Mischanlage"
    DoCmd.OpenQuery stDocName, acNormal, acReadOnly

Exit_Mischanlage_Click:
    Exit Sub

Err_Mischanlage_Click:
    MsgBox Err.Description
    Resume Exit_Mischanlage_Click
   
End Sub



Abfrage: (Bild)

https://www.dropbox.com/s/8811q5ur665ohlo/2015-11-24%2021_08_24-Eigen%C3%BCberwachung%20-%20%5Bteilauswertung%20Mischanlage%5D.jpg?dl=0


wenn ich in die Abfrage Das Kriterium  für "Rezeptwechsel auf Nr" manuell eintrage z.B. '1 or 6' zeigt er mir die daten der Proukte 1 und 6 an in dem Zeitraum wo ausgewählt ist

el_gomero

Moin,

str = leer - kenn ich nicht, wenn schon dann vllt = vbNULLstring oder "". Die Bezeichner bestehend nur aus Präfix sind eh gewöhnungsbedürftig, verursachen dein Problem aber nicht.

Zur Lösung kannst du mal nach Next var ein debug.print str einbauen und den String im Direktfenster ausgeben und hier posten. Ebenso wie das SQL-Statement deiner Abfrage - mit dem Bild kann zumindest ich nix anfangen.
Gruß
Jürgen


Hilfe nach bestem Wissen, ohne Anspruch auf Richtigkeit und Vollständigkeit.
*feedback erwünscht*
Bitte Tipps lesen

DF6GL

Hallo,

die Suche im Forum brächte Beispiele.....

Für was soll die Abfrage verwendet werden? Als reine Abfrageanzeige bringt es nichts.

Der folgende Code nimmt an, dass ein numerischer Primärschlüsselwert in der ersten Spalte des Listenfeldes steht. Wenn es sich um Datentyp TEXT handelt, müssen Hochkommata um die Werte in der "IN"-Kriterien-Liste verwendet werden.



Private Sub Mischanlage_Click()

   Dim var As Variant, str As String
On Error GoTo Err_Mischanlage_Click
    Me!ProduklisteTXT = Null


    str =   ""  ' leer
    For Each var In Me!Produktliste.ItemsSelected
       str = str & "," & Me!Produktliste(0,var)

     Next var

If len(str) then str = " Where IDFeld  in (" & Mid(str,2) & ")"

    Me!ProduklisteTXT = str
Currentdb.Querydefs("teilauswertung Mischanlage").SQL = "Select * from tblDeineTabelle " & str

    DoCmd.OpenQuery "teilauswertung Mischanlage", acNormal, acReadOnly   'besser Formular als Abfrageansicht benutzen!

Exit_Mischanlage_Click:
    Exit Sub

Err_Mischanlage_Click:
    MsgBox Err.Description
    Resume Exit_Mischanlage_Click
   
End Sub



jedoschmidt

Bei der Auswahl zweier Produkte ist der "1 OR 6"


SELECT FMZ1.Datum, FMZ1.Uhrzeit, FMZ1.[Intervallzeit in sec], FMZ1. [Rezeptwechsel auf Nr], FMZ1. [Aktueller Gemengesollwert]
FORM FMZ1
WHERE (((FMZ1.Datum)>=[Forms]! [Monats Auswertung  (zusammenfassung)]! [von_dat]) And (FMZ1.Datum)<=[Forms]! [Monats Auswertung  (zusammenfassung)]! [Bis_dat]) And ((FMZ1.[Intervallzeit in sec])>0) And ((FMZ1. [Rezeptwechsel auf Nr])=[Forms]! [Monats Auswertung  (zusammenfassung)]![ProduktlisteTxt]))
GROUP BY FMZ1.Datum, FMZ1.Uhrzeit, FMZ1.[Intervallzeit in sec], FMZ1. [Rezeptwechsel auf Nr], FMZ1. [Aktueller Gemengesollwert];
[\code]


DF6GL

#4
Hallo,

was willst Du damit aussagen?

Die Frage nach der Verwendung  der Abfrage (und den Datentypen) hast Du nicht beantwortet.

Zudem ist der Einsatz von Formular-Steuerelemente-Referenzen (für solche Kriterien-Anforderungen) nicht geeignet.



Dim strSQL as String
.
.
If len(str) then
str = " in (" & Mid(str,2) & ")"   ' IN(...)  entspricht der OR-Bedingung.
.
strSQL = "SELECT [Datum], [Uhrzeit], [Intervallzeit in sec], [Rezeptwechsel auf Nr], [Aktueller Gemengesollwert] From FMZ1 " & _
" WHERE [Datum] between " & Format(nz(Me![von_dat],Date), "\#yyyy-mm-dd\#") & " And " & Format(nz(Me![bis_dat],Date), "\#yyyy-mm-dd\#") & _
" And [Intervallzeit in sec] >0 And  [Rezeptwechsel auf Nr] " & str & _
" GROUP BY [Datum], [Uhrzeit], [Intervallzeit in sec], [Rezeptwechsel auf Nr], [Aktueller Gemengesollwert]"

Currentdb.Querydefs("teilauswertung Mischanlage").SQL = strSQL

End If

(unchecked)

MaggieMay

Hi,
Zitat von: jedoschmidt am November 24, 2015, 21:17:20wenn ich in die Abfrage Das Kriterium  für "Rezeptwechsel auf Nr" manuell eintrage z.B. '1 or 6' zeigt er mir die daten der Proukte 1 und 6 an in dem Zeitraum wo ausgewählt ist
dann schau dir beim nächstem Mal erstmal den SQL-Code an, der daraus generiert wird, ehe du dich wunderst. ;-)
Freundliche Grüße
MaggieMay