This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
vba:access:functions:opensqlasquery [09.12.2013 09:39:54] 127.0.0.1 external edit |
vba:access:functions:opensqlasquery [31.08.2015 11:57:54] (current) yaslaw |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ======[VBA] [Access] openSqlAsQuery()====== | + | ======[VBA][Access] openSqlAsQuery()====== |
In MS Access kann man SQL-Statements, welche man in VBA erstellt nicht direkt öffnen. Mit der folgenden | In MS Access kann man SQL-Statements, welche man in VBA erstellt nicht direkt öffnen. Mit der folgenden | ||
Funktion wird eine temporäre Abfrage (<nowiki>QueryDef</nowiki>) erstellt und diese anschliessend geöffnet | Funktion wird eine temporäre Abfrage (<nowiki>QueryDef</nowiki>) erstellt und diese anschliessend geöffnet | ||
Die Abfrage bleibt bestehen und wird beim nächsten mal auf das neue SQL angepasst. | Die 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. | + | >In einer Mehrbenutzerumgebung sollte der Name des temporären Query noch um die Userkennung ergänzt werden. |
<code vb>'------------------------------------------------------------------------------- | <code vb>'------------------------------------------------------------------------------- | ||
Line 18: | Line 18: | ||
' */ | ' */ | ||
Public Sub openSqlAsQuery(ByVal sql As String) | Public Sub openSqlAsQuery(ByVal sql As String) | ||
- | Const C_TEMP_QUERY_NAME = "vw_temp" | + | Dim qryName as String: qryName = "vw_temp_" & Environ("UserName") |
On Error Resume Next | On Error Resume Next | ||
- | 'Versuchen das SQL hinter der Abfrage vw_temp zu ersetzen | + | 'Versuchen das SQL hinter der Abfrage vw_temp_username zu ersetzen |
- | CurrentDb.QueryDefs(C_TEMP_QUERY_NAME).sql = sql | + | CurrentDb.QueryDefs(qryName ).sql = sql |
If Err.Number <> 0 Then | If Err.Number <> 0 Then | ||
'Falls das Query vw_temp noch nicht besteht, neu anlegen | 'Falls das Query vw_temp noch nicht besteht, neu anlegen | ||
- | Call CurrentDb.CreateQueryDef(C_TEMP_QUERY_NAME, sql) | + | Call CurrentDb.CreateQueryDef(qryName , sql) |
Err.clear | Err.clear | ||
End If | End If | ||
Line 31: | Line 31: | ||
'Abfrage öffnen | 'Abfrage öffnen | ||
- | Call DoCmd.OpenQuery(C_TEMP_QUERY_NAME) | + | Call DoCmd.OpenQuery(qryName ) |
End Sub</code> | End Sub</code> |