2016-04-13 13 views
1

Bevor ich anfange, weiß ich, dass hier ein TON von Fehler 3075 Fragen sind, und ich habe einen guten Blick durch sie, um einen zu finden, der mir helfen kann, aber ich war unfähig zu.Zugriff auf VBA-Laufzeitfehler 3075

Ich habe eine Access-Datenbank in VBA geschrieben. Ich versuche, eine SQL-Anweisung auszuführen, die einfach die Datenbank abfragt. Ich bekomme den klassischen 3075-Fehler, was darauf hindeutet, dass meine SQL-Abfrage ungültig ist. Ich habe die Abfrage in ein Meldungsfeld gedruckt und für mich sieht es gut aus, aber ich benutze Inner Joins und ich bin nicht vertraut mit ihnen.

Könnte jemand bitte meinen Code überprüfen, um mir eine Hand zu geben?

My SQL zugehöriger Code VBA unter:

MsgBox strSQL 

Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) 
If rs.RecordCount > 0 Then 
    rs.MoveLast 
    lblTotal.Caption = rs.RecordCount 
Else 
    lblTotal.Caption = "0" 
End If 

ziemlichen Standard. Ich habe nicht aufgenommen, wie ich strSQL mache, weil es auf einer komplexen Menge von if-Anweisungen basiert. Der Wert von strSQL wenn ich versuche, den Re-Cord zu setzen:

SQL Statement

Mein Verdacht ist, dass es etwas falsch mit der Art, wie ich die Daten am referenzieren. Nur um Ihnen das ganze Bild, unten sind die drei Tabellen verwiesen:

tblHistory:
tblHistory

tblBooks: tblBooks1 Fortsetzung: tblBooks2

tblBookTypes: tblBookTypes

Ich habe versucht, das Problem zu isolieren, indem ich die SQL-Anweisung bis auf den letzten Punkt durchtrenne. Ich könnte es mit einer einfachen Anweisung wie SELECT * FROM tblHistory arbeiten, sowie einen WHERE Parameter hinzufügen, aber sobald ich die Inner Join eingeführt habe, bekam ich den Fehler 3075 erneut.

Weiß jemand, wo ich falsch liege? Das macht mich verrückt!

+3

Machen Sie diese 'WHERE'-Klausel zum letzten Teil Ihrer Abfrageanweisung. Ich vermute, dass Sie möglicherweise eine ähnliche Abfrage von Grund auf mit der Entwurfsansicht des Access-Abfrage-Designers erstellen können. Wenn es funktioniert, wechseln Sie zur SQL-Ansicht, um die gültige 'SELECT'-Anweisung anzuzeigen und diese als Modell zu verwenden, wenn Sie Ihren VBA-Code überarbeiten. – HansUp

+0

Du bist ein blutiger Lebensretter, es ging darum, die WHERE-Anweisung am Ende nach dem Inner Join zu setzen. Wenn du das als Antwort aufsetzen willst, werde ich es akzeptieren. Vielen Dank! –

Antwort

1

Access beschwerte sich über die Abfrage, weil die WHERE-Klausel an der falschen Position ist.

Anstelle dieses Muster, SELECT ... FROM ... WHERE ... INNER JOIN, müssen Sie ein Muster wie SELECT ... FROM ... INNER JOIN ... WHERE

Mit anderen Worten bewegen, dass WHERE Klausel am Ende der Abfrageanweisung.