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 🐑

Categories:

Tags:

Comments are closed