Abfrage mit VBA

RunSQL führt ein SQL aus. Sprich, ein INSERT, DELETE oder UPDATE. SELECT ohne INTO zählt da nicht dazu, da es keine Daten manipuliert.

Ein Auszug aus der F1-Hilfe auf runSQL
SQLStatement: A string expression that's a valid SQL statement for an action query or a data-definition query . It uses an INSERT INTO, DELETE, SELECT...INTO, UPDATE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, or DROP INDEX statement. Include an IN clause if you want to access another database.


Die ArtikelNr in meinem Beispiel war ein Beispiel. Nimm dein ArtikelNr-Feld oder was auch immer. Aber es muss immer vom Type 'Feld = Wert' sein und nicht nur 'Wert'
 
Doch. Es ist nur die Frage was du damit willst.

Du kannst jederzeit eine Abfrage erstellen und öffnen. Doch dazu muss sie mindestens als Abfrage gespeichert sein.

Dazu eine kleine Funktion
Visual Basic:
Public Sub openSqlAsQuery(ByVal sql As String)
    Const C_TEMP_QUERY_NAME = "vw_temp"
    
    'Dein SQL
    sql = "SELECT * FROM "
    
On Error Resume Next
    'Versuchen das SQL hinter der Abfrage vw_temp zu ersetzen
    CurrentDb.QueryDefs(C_TEMP_QUERY_NAME).sql = sql
    If Err.Number <> 0 Then
        'Falls das Query vw_temp noch nicht besteht, neu anlegen
        Call CurrentDb.CreateQueryDef(C_TEMP_QUERY_NAME, sql)
        Err.clear
    End If
On Error GoTo 0

    'Abfrage öffnen
    Call DoCmd.OpenQuery(C_TEMP_QUERY_NAME)

End Sub

Diese kannst du dann so aufrufen
Visual Basic:
Public Sub test()
    Dim SqlString As String
    
    SqlString = "SELECT Master.ArtikelNr, Master.Artikel, Master.KundenNr, Master.Kunde, Master.Preis FROM Master"

    Call openSqlAsQuery(SqlString)

End Sub
 
Code:
Public Sub openSqlAsQuery(ByVal sql As String)
    Const C_TEMP_QUERY_NAME = "vw_temp"
    
    'Dein SQL
    sql = "SELECT * FROM "


Muss ich denn dann hier sql = SELECT Master.ArtikelNr, Master.Artikel......etc. eingeben?

Oder ist das irgendwie so eine Allgemeine Form. Weil bei dem Test Code würde ich es ja sonst nochmal engeben.
 
Diese kannst du dann so aufrufen
Visual Basic:
Public Sub test()
    Dim SqlString As String
    
    SqlString = "SELECT Master.ArtikelNr, Master.Artikel, Master.KundenNr, Master.Kunde, Master.Preis FROM Master"

    Call openSqlAsQuery(SqlString)

End Sub

Nachtrag:
Sorry, hab ein Fehler in meinerm Script entdeckt!
das folgende muss gelöscht werden!
Visual Basic:
    'Dein SQL
    sql = "SELECT * FROM "

So sollte es aussehen
Visual Basic:
Public Sub openSqlAsQuery(ByVal sql As String)
    Const C_TEMP_QUERY_NAME = "vw_temp"
     
On Error Resume Next
    'Versuchen das SQL hinter der Abfrage vw_temp zu ersetzen
    CurrentDb.QueryDefs(C_TEMP_QUERY_NAME).sql = sql
    If Err.Number <> 0 Then
        'Falls das Query vw_temp noch nicht besteht, neu anlegen
        Call CurrentDb.CreateQueryDef(C_TEMP_QUERY_NAME, sql)
        Err.clear
    End If
On Error GoTo 0
 
    'Abfrage öffnen
    Call DoCmd.OpenQuery(C_TEMP_QUERY_NAME)
 
End Sub
 
Zurück