2016-09-09 5 views
0
Set db = CurrentDb 
Set qdf = db.CreateQueryDef("Unique_Address1_qry", strSQL) 
Application.RefreshDatabaseWindow 

strSQL = "SELECT field1 AS field1, field2 as field2 " & vbCrLf & _ 
"'" & strScenario & "'" & "AS Scenario, " & vbCrLf & _ 
"FROM table_tbl " & vbCrLf & _ 
"GROUP BY field1,....; " 

Die strScenario enthalten eine Berechnungsformel wie "[field2]/2 + 3" das Ergebnis ist, dass in jedem Datensatz für das calulated fachter "[field2]/2 + 3" Es zeigt sich nichts von der Kalkulation.Zugriff dynamische Abfrageerstellungs in Vba

+0

Entfernen Sie die einfachen Anführungszeichen ''' um die Variable? Das '' 'teilt der Abfrage mit, dass es sich um eine literale Textzeichenfolge handelt, die zurückgegeben werden soll. –

Antwort

1

Die Abfrage wirklich sollte parametrisiert werden ... aber Sie haben strScenario zitiert als ein Literal. Außerdem fehlt ein Komma nach "field2" und ein Leerzeichen nach strScenario.

Es sollte mehr wie folgt aussehen:

strSQL = "SELECT field1 AS field1, field2 as field2, " & _ 
    strScenario & " AS Scenario FROM table_tbl GROUP BY field1,....; " 

Beachten Sie, dass das Ergebnis der SQL sehen können Sie einfach erstellen, indem Debug.Print strSQL nach der Zuweisung setzen und es in dem Direkt-Fenster suchen.

+0

Wenn ich eine einfache Formel verwende, funktioniert es, aber wenn ich anfange, Dinge wie zu verwenden: IIF ([SumOfVolume]> = 5; [SumOfLDM] * 1750; 0) gibt dies Probleme. Ist die IIF-Funktion, die die Isse erstellt. – Dirk

+1

@Dirk - Sehen Sie sich das Ergebnis im unmittelbaren Fenster an. Ist es gültiges SQL für MS Access? In diesem Fall ist es nicht - ";" beendet eine Aussage - sie sollten "," sein. Wenn Sie Zweifel haben, kopieren Sie es in den Access SQL Designer und versuchen Sie es auszuführen. Access wird Sie wissen lassen, wo Ihr Syntaxfehler liegt. – Comintern

+0

Ich änderte die; mit, für die IIF-Anweisung und 1,2 in 1.2 und es funktioniert. Vielen Dank für die Hilfe. :-) – Dirk

2

Ich werde nicht wiederholen, was @Comintern sagte, aber ich kann Ihnen ein Angelrute geben:

  • Platz einen Haltepunkt (F9) auf der Linie unmittelbar nach der strSQL = Zuordnung.
  • Führen Sie den Code aus.
  • Wenn die Ausführung den Haltepunkt, drücken Sie Ctrl + G zu bringen, um die sofort Scheibe und Art erreicht:

    ?strSQL 
    

Dies wird Ausgang der String-Wert (? ist eine Abkürzung für Print), die Sie dann inspizieren können, kopieren Sie in die Zwischenablage, fügen Sie eine neue Abfrage ein und versuchen Sie auszuführen.

Dann können Sie den Code beheben, die aktuelle Zeile auf die modifizierte strSQL = Zuordnung bewegen zurück, versuchen ?strSQL wieder gründlich & wiederholen, bis der Code eine gültige SQL-Abfrage generiert - dann können Sie den Haltepunkt entfernen und drücken F5 zu Fortsetzen der Ausführung, und Sie haben Arbeitscode.


einem Mann einen Fisch geben, er einen Tag lang essen werde. Geben Sie einem Mann eine Angel, er wird für den Rest seines Lebens essen.

+1

So wahr. Links dazu: [Wie man VBA-Code debuggt] (http://www.cpearson.com/excel/DebuggingVBA.aspx) und [Wie Debuggen von dynamischem SQL in VBA] (http://stackoverflow.com/questions/418960/managing-and-debugging-sql-queries-in-ms-access/1099570#1099570) – Andre