Moin. Ich bin Sönke SchÀfer, der DatenschÀfer. Und wenn Du wie ich tÀglich mit Access, VBA und SQL Server arbeitest, dann kennst Du das Thema: Verbindungen zur Datenbank. Stabil sollen sie sein. Sicher. Und wartungsarm. Nur leider sieht die RealitÀt oft anders aus.
DSNs, die nur lokal funktionieren. Passwörter im Klartext. Benutzer, die ihre Verbindung verlieren. Ich zeig Dir heute, wie Du das besser machst. DSN-less, mit Trusted Connection â und voll per VBA steuerbar.
Warum DSN-less?
Weilâs einfacher ist. Keine ODBC-EintrĂ€ge auf jedem Client. Kein âFunktioniert nur bei mirâ. Nur ein sauberer Connect-String, zentral verwaltet. Und: Du hast die volle Kontrolle im Code.
Variante 1: Trusted Connection mit Windows-Login
Ideal fĂŒr interne Anwendungen. Kein Passwort im Code. Berechtigungen laufen ĂŒber das Windows-Konto.
Function GetTrustedConnection() As ADODB.Connection
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim connStr As String
connStr = "Driver={ODBC Driver 17 for SQL Server};" & _
"Server=DEINSERVER\SQLINSTANCE;" & _
"Database=DEINEDATENBANK;" & _
"Trusted_Connection=yes;" & _
"Encrypt=yes;" & _
"TrustServerCertificate=yes;" & _
"Connection Timeout=30;"
conn.Open connStr
Set GetTrustedConnection = conn
End Function
Voraussetzung: Der angemeldete Benutzer hat Zugriff auf den SQL Server.
Variante 2: SQL-Login (nicht empfohlen, aber manchmal nötig)
Function GetSqlLoginConnection() As ADODB.Connection
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim connStr As String
connStr = "Driver={ODBC Driver 17 for SQL Server};" & _
"Server=DEINSERVER;" & _
"Database=DEINEDATENBANK;" & _
"Uid=appuser;" & _
"Pwd=geheim;" & _
"Encrypt=yes;" & _
"TrustServerCertificate=yes;" & _
"Connection Timeout=30;"
conn.Open connStr
Set GetSqlLoginConnection = conn
End Function
Hier bitte mitdenken: Das Passwort sollte nie im Code stehen. Lieber verschlĂŒsselt in einer Konfigtabelle oder Registry speichern.
Verbindung testen vor dem Ăffnen
Du willst nicht, dass Deine Anwendung abstĂŒrzt, wenn der Server nicht erreichbar ist? Dann prĂŒf die Verbindung vorher:
Function IstVerbindungMoeglich(connStr As String) As Boolean
On Error GoTo Fehler
Dim c As ADODB.Connection
Set c = New ADODB.Connection
c.Open connStr
IstVerbindungMoeglich = True
c.Close
Exit Function
Fehler:
IstVerbindungMoeglich = False
End Function
Beispiel: Daten per Recordset holen
Sub ZeigeKundennamen()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "SELECT Name FROM Kunde", GetTrustedConnection, adOpenForwardOnly, adLockReadOnly
Do While Not rs.EOF
Debug.Print rs!Name
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
End Sub
Pro-Tipp: Mehr Speed mit vorbereiteten Abfragen
Statt direkt SQL zu schreiben, kannst Du auch Prozeduren aufrufen und Parameter ĂŒbergeben:
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = GetTrustedConnection
With cmd
.CommandText = "dbo.GetKundeNachID"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@ID", adInteger, adParamInput, , 123)
End With
Set rs = cmd.Execute
Das ist schnell. Sicher. Und ĂŒbersichtlich.
Fazit vom DatenschÀfer
Wenn Du in einem KMU unterwegs bist und mit SQL Server arbeitest, dann ist die Verbindung Dein Nadelöhr. Mit DSN-less-Verbindungen hast Du mehr Kontrolle. Mit Trusted Connection sparst Du Dir die Passwortpflege. Und wennâs doch mit SQL-Login sein muss, dann bitte mit Bedacht.
Ich helf Dir gern dabei, das in Deiner Umgebung sauber umzusetzen. Norddeutsch. Klar. Ohne Gedöns.
DatenschĂ€fer: Analyse, Auswertung und Automatisierung fĂŒr KMU im Norden đ
Comments are closed