title image


Smiley Ansonsten...
musst du dich einfach mal mit Variablen, Operatoren und Datentypen auseinandersetzen - der Grundlage jeder Art von Programmierung.



Wenn man dein Ausgangsposting nimmt:



rs3.FindFirst "[BES_ID] = " & [Forms]![frmBestellungen]![BES_ID] And "[ART_ID] = '" & Forms![frmSuche_Bestellung]![frmSuchdetails_Bestellung].Form![Artikelnummer] & "'"





Findfirst erwartet (laut Hilfe!) ein String-Argument, das einer SQL-Where-Klausel entsprechen muss.



Jetzt schauen wir uns mal deinen String an:



"[BES_ID] = " & [Forms]![frmBestellungen]![BES_ID] And "[ART_ID] = '" & Forms![frmSuche_Bestellung]![frmSuchdetails_Bestellung].Form![Artikelnummer] & "'"





der enthält 2 x (richtigerweise) den Operator "&" und einmal den (unsinnigen!) Operator "AND".



Nehmen wir einmal an, [Forms]![frmBestellungen]![BES_ID] enthält den Wert 123 und Forms![frmSuche_Bestellung]![frmSuchdetails_Bestellung].Form![Artikelnummer] den Wert 345:



VB macht daraus:



"[BES_ID] = " & [Forms]![frmBestellungen]![BES_ID]



--> "[BES_ID] = 123"





sowie



"[ART_ID] = '" & Forms![frmSuche_Bestellung]![frmSuchdetails_Bestellung].Form![Artikelnummer] & "'"



--> "[ART_ID] = '345'"





Diese beiden Strings werden nun mit dem logischen Operator "AND" verknüpft - was natürlich kompletten Unsinn ergibt.



So etwas kann man übrigens wunderbar selbst mit Hilfe des Debuggers und schrittweiser Vereinfachung und Zerlegung der Ausdrücke ermitteln. Und: man erleichtert sich sehr die Arbeit, wenn man (zumindest so lange man nicht genau weiss, was man da tut) nicht allzuviel in eine Zeile schreibt bzw. die Ausdrücke hinlänglich simpel hält und in mehreren Zeilen zusammenbaut. In deinem Fall halt:



strSQL = "[BES_ID] = " & [Forms]![frmBestellungen]![BES_ID]

strSQL = strSQL & "AND [ART_ID] = '" & Forms![frmSuche_Bestellung]![frmSuchdetails_Bestellung].Form![Artikelnummer] & "'"

rs3.FindFirst strSQL



Ein anderes Thema sind die Datentypen (die ich aber nun nicht kenne - speziell nicht den von "ART_ID" - vielleicht ist es ja wirklich ein Textfeld, dann taucht natürlich die Frage auf, warum es "...ID" heisst...). Auf Nullwerte in den Formularfeldern prüfst du ebenfalls nicht. Und: Nach Möglichkeit sollte man Bezüge zu anderen Formularen vermeiden und mit "Me" arbeiten (bzw., wenn es um Daten aus anderen Formularen geht, mit globalen Variablen o.ä. arbeiten oder die Daten aus den Tabellen und nicht aus dem Formular holen...)



Richtigerweise müsste es also wohl eher heissen:



if Not Isnull(gblBesID) then

strSQL = strSQL & "AND [BES_ID] = " & gblBesID

end if

artnr = Me![frmSuchdetails_Bestellung].Form![Artikelnummer]

if Not Isnull(artnr ) then

strSQL = strSQL & "AND [ART_ID] = " & artnr

end if

if strSQL "" then

rs3.FindFirst Mid(strSQL,5)

'...

end if





Aber was jetzt welcher Operator macht, sollte man eigentlich schon wissen - und wie man mit dem Debugger umgeht, auch. Darüber hinaus sind vielleicht auch diese meine Hinweise hilfreich: Komplexe SQL debuggen.


Gruß aus dem Norden
Reinhard


Bitte immer die Access-Version angeben!
DB-Wiki


Wie man Fragen richtig stellt

YaccessAccess-FAQUnd ansonsten: Wikipedia




geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: