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 (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
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.
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
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]
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)
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. ;-)