Wie verwende ich per VBA bessere ODBC-Verbindungsoptionen zu SQL Server (Trusted, DSN-less)?

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 = connEnd 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 = connEnd 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 FunctionFehler:    IstVerbindungMoeglich = FalseEnd 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 = NothingEnd 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.CommandSet cmd = New ADODB.CommandSet cmd.ActiveConnection = GetTrustedConnectionWith cmd    .CommandText = "dbo.GetKundeNachID"    .CommandType = adCmdStoredProc    .Parameters.Append .CreateParameter("@ID", adInteger, adParamInput, , 123)End WithSet 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 🐑

Kategorien:

Schlagwörter: