2016-09-20 1 views
0

Ich bin ein Amateur-vba Programmierer zur Zeit mit folgenden kämpfen:SQL-Abfrage in Access nicht anwenden WHERE-Klausel

ich eine einfachen SQL-Abfrage für mein VBA-Programm schrieb Daten aus einer vorhandenen Abfrage (GroupedData) in Access zu extrahieren:

Dim strSQL as string 
Dim db as dao.database 
dim rs as dao.recordset 

strSQL = "SELECT GroupedData.EmployeeID, GroupedData.End, GroupedData.LOB, GroupedData.Position, GroupedData.WorkStatus " & _ 
    "FROM GroupedData WHERE (((GroupedData.End) Is Null) AND ((GroupedData.Position)=0) AND ((GroupedData.WorkStatus)=0));" 

Set db = OpenDatabase(MY_DB, dbOpenDynaset) 
Set rs = db.openrecordset(strSQL, dbOpenSnapshot) 

Do While Not rs.EOF 
    ListBox1.AddItem rs!EmployeeID 
    rs.MoveNext 
Loop 

Also mein Problem ist, dass SQL reibungslos läuft, aber bewirbt sich keine Filter (das ist, wo Klausel - es Aufzeichnungen erzeugt, wo workstatus und Positionswerte über 0 enthalten)

ich solche Abfragen getan haben in die Vergangenheit ohne irgendwelche Probleme. Dieses Mal jedoch stecke ich fest

Jede Hilfe wäre sehr geschätzt!

Vielen Dank

+2

Bitte entfernen Sie alle Klammern aus Ihrer WHERE-Klausel. Schauen Sie sich auch Aliase an, sie werden Ihren Code verkürzen und ihn lesbarer machen. So: 'SELECT gd.EmployeeID FROM GroupedData gd' –

+1

Abgesehen von den Kosmetika sollte die Abfrage gut funktionieren. – sstan

+0

Vielen Dank für Ihre Tipps, aber nach dem Entfernen der Klammern liefert der Code immer noch nicht die richtigen Ergebnisse. Wenn ich diesen Code in den Zugriff einfügen, funktioniert es hervorragend – SqU33z3R

Antwort

0

Ok, ich habe das Problem behoben. Hier ist, was passiert ist: Ich habe eine separate Funktion, die Mitarbeiter Name basierend auf EmployeeID abgerufen wurde gemacht. Aber in dieser Funktion hatte ich Recordset und Datenbank auf die gleiche Weise deklariert, nämlich: rs und db. Was passiert ist, wenn ich die Abfrage ausgeführt habe, war, dass der erste Datensatz gefiltert wurde, aber dann waren die anderen ungefiltert, weil sie auf dem Recordset innerhalb der Funktion basierten (was natürlich alle Angestellten sind). Ein so dummer Fehler :) Danke anyways