| Yaslaw.Info > VB / VBA > [VBA] [Access] öffnen eines SQL-Strings als Abfrage |
Impressum ∞ |
[VBA] [Access] öffnen eines SQL-Strings als Abfrage
In MS Access kann man SQL-Statements, welche man in VBA erstellt nicht direkt öffnen. Mit der folgenden Funktion wird eine temporäre Abfrage (QueryDef) erstellt und diese anschliessend geöffnetDie Abfrage bleibt bestehen und wird beim nächsten mal auf das neue SQL angepasst.
In einer Mehrbenutzerumgebung sollte der Name des temporären Query noch um die Userkennung ergänzt werden.
'-------------------------------------------------------------------------------
'mpl by ERB software
'Environment Access 2000 und höher
'Author Stefan Erb (ERS)
'History 22.12.2011 - ERS - Creation
'-------------------------------------------------------------------------------
'/**
' * Öffnet ein SQL-String als Abfrage (QueryDef)
' * @param String SQL-Statement
' */
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
'mpl by ERB software
'Environment Access 2000 und höher
'Author Stefan Erb (ERS)
'History 22.12.2011 - ERS - Creation
'-------------------------------------------------------------------------------
'/**
' * Öffnet ein SQL-String als Abfrage (QueryDef)
' * @param String SQL-Statement
' */
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
Und hier noch ein Beispiel wie man die Funktion anwenden kann
Public Sub test()
Dim Sql As String
Dim id As Long
id = MsgBox("Get ID")
Sql = "SELECT * FROM myTable WHERE ID = " & id
Call openSqlAsQuery(Sql)
End Sub
Dim Sql As String
Dim id As Long
id = MsgBox("Get ID")
Sql = "SELECT * FROM myTable WHERE ID = " & id
Call openSqlAsQuery(Sql)
End Sub
