none
ADODB - Connection zu SQL Server ohne spezifischen User

    Frage

  • Hallo Leute,

    und zwar habe ich ein Problem beim Verbinden zu einer ODBC-Datenbank per VBA in Access 2010.

    Wir haben umgestellt auf ADODB anstatt von DAO. Dies ist notwendig, da ab Access 2010 die "Workspaces" aufgrund von "dbUseODBC" für uns nicht mehr funktionieren.

    In unserem früheren Code, erstellen wir eine Verbindung per dbUseODBC zur ODBC (SQL Server) Datenbank. Da wir per ConnectionString keinen User mitgeben, erfrägt er sich bei jedem Start der Access-Datenbank den Usernamen und das Passwort. Das ist auch so gewollt, da jeder Mitarbeiter einen User besitzt und sich mit diesem anmelden soll.

    Nun: Bei ADODB wirft das Programm einen Fehler, da er ohne User keine Verbindung öffnen kann. Die Frage lautet nun: Ist es möglich eine solche User-Abfrage beim Verbinden zu der Datenbank aufzurufen (ohne direkt ein eigenes Formular zu machen)? Oder ist ein eigenes, kleines Formular zum Abfragen notwendig, da ADODB dies nicht mehr alleine handeln kann?

    Viele Grüße,
    Yannici



    • Bearbeitet Yannici Dienstag, 25. März 2014 12:32
    Dienstag, 25. März 2014 12:17

Antworten

  • Hallo,

    ADODB braucht man dafür nicht, es geht auch via DAO via OpenDatabase:

    Sub ConnectSqlServerDAO()
        Dim dbs As DAO.Database
        Set dbs = DBEngine(0).OpenDatabase("NorthwindDSN", dbDriverPrompt, False, _
            "ODBC;DSN=NorthwindDSN;")
        dbs.Close
    End Sub
    

    Anstatt einer DSN kann man auch die anderen Optionen wie bei ODBC Direkt (RDO) verwenden.

    Mit ADODB sähe es in etwa so aus:

    Sub ConnectSqlServerAdoDb()
        Dim con As New ADODB.connection
        con.ConnectionString = "DSN=NorthwindDSN"
        con.Properties("PROMPT") = adPromptComplete
        con.Open
        con.Close
    End Sub
    
    Gruß Elmar

    • Als Antwort markiert Yannici Mittwoch, 26. März 2014 10:11
    Dienstag, 25. März 2014 15:26

Alle Antworten

  • Am 25.03.2014 schrieb Yannici:

    Wir haben umgestellt auf ADODB anstatt von DAO. Dies ist notwendig, da ab Access 2010 die "Workspaces" aufgrund von "dbUseODBC" für uns nicht mehr funktionieren.

    In unserem früheren Code, erstellen wir eine Verbindung per dbUseODBC zur ODBC (SQL Server) Datenbank. Da wir per ConnectionString keinen User mitgeben, erfrägt er sich bei jedem Start der Access-Datenbank den Usernamen und das Passwort. Das ist auch so gewollt, da jeder Mitarbeiter einen User besitzt und sich mit diesem anmelden soll.

    Nun: Bei ADODB wirft das Programm einen Fehler, da er ohne User keine Verbindung öffnen kann. Die Frage lautet nun: Ist es möglich eine solche User-Abfrage beim Verbinden zu der Datenbank aufzurufen (ohne direkt ein eigenes Formular zu machen)? Oder ist ein eigenes, kleines Formular zum Abfragen notwendig, da ADODB dies nicht mehr alleine handeln kann?

    Was spricht dagegen, beim Start des Programmes den in Windows
    angemeldeten Benutzer in Form ein Trusted Connection mitzugeben?

    "ODBC;DRIVER=SQL Server;SERVER=DeinSQLSERVER;DATABASE=DeineDatenbank;Trusted_Connection=Yes"


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Dienstag, 25. März 2014 13:27
  • Vielen Dank für die Antwort.

    Leider spricht tatsächlich etwas dagegen. Leider können wir (Stand heute) die Logik nicht verändern, da der Kunde etwas dagegen hat.

    Und zwar wird nach dem erfolgreichen Anmelden der SQL Befehl "SELECT user" ausgeführt. Das frägt den angemeldeten User ab. Bei einer Trusted Connection bekommt man da immer den User "dbo". Und somit nicht der User, den wir erwarten.

    Vielleicht als Anmerkung der aktuelle Connection String:
    "ODBC;Database=DatenbankName;DSN=DSNName;APP=Access;WSID=ComputernameDesBenutzers"

    Den haben wir vom alten DAO-Code übernommen. Wenn man einen gültigen User+Passwort mitgibt, funktioniert das auch.

    Grüße,
    Yannic

    • Bearbeitet Yannici Dienstag, 25. März 2014 13:53
    Dienstag, 25. März 2014 13:48
  • Hallo,

    ADODB braucht man dafür nicht, es geht auch via DAO via OpenDatabase:

    Sub ConnectSqlServerDAO()
        Dim dbs As DAO.Database
        Set dbs = DBEngine(0).OpenDatabase("NorthwindDSN", dbDriverPrompt, False, _
            "ODBC;DSN=NorthwindDSN;")
        dbs.Close
    End Sub
    

    Anstatt einer DSN kann man auch die anderen Optionen wie bei ODBC Direkt (RDO) verwenden.

    Mit ADODB sähe es in etwa so aus:

    Sub ConnectSqlServerAdoDb()
        Dim con As New ADODB.connection
        con.ConnectionString = "DSN=NorthwindDSN"
        con.Properties("PROMPT") = adPromptComplete
        con.Open
        con.Close
    End Sub
    
    Gruß Elmar

    • Als Antwort markiert Yannici Mittwoch, 26. März 2014 10:11
    Dienstag, 25. März 2014 15:26
  • Funktioniert wunderbar!
    Danke dir, Elmar! :)

    Grüße,
    Yannic

    Mittwoch, 26. März 2014 10:10