none
ODBC: SQLConnect zu Microsoft Access nicht möglich

    Frage

  • Hallo Zusammen,

    ich hänge schon seit mehreren Tagen an diesem Problem und da ich bisher nichts hilfreiches im Web gefunden habe, muss ich nun selbst nachfragen.

    Ich bin zur Zeit dabei ein C Programm zu schreiben, das mit Hilfe von ODBC Daten in eine Tabelle in einer Access Datenbank schreiben soll. Hierfür hab ich auch schon eine Datenquelle angelegt mit dem Namen "XU" die direkt auf die Datenbank verweist.

    Wenn ich aber nun folgendes ausführe:

    #define DSN "XU"
    ...
    rc = SQLConnect(hdbc1, (SQLWCHAR *) DSN, sizeof(DSN), NULL, 0, NULL, 0);

    und mir dann mit Hilfe von SQLGetDiagRec() die Fehlermeldung hole folgende Meldung:

    [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

    Ich bin ganz frisch auf diesem Gebiet und noch am lernen und das Problem übersteigt meine Fähigkeiten ich hab auch nicht heraus finden können wie ich einen Treiber als default setzen kann.

    Vielleicht noch als Information ich benutze hier einen Windows XP-Rechner und den darauf vorinstallierten ODBC-Treiber

    Vielen Dank für die Hilfe!

    Mittwoch, 29. August 2012 09:35

Antworten

  • Also vielen Dank Winfried aber ich hab das Problem gefunden.

    Es lag nicht direkt an der DSN sondern an der Übergabe des Namens, SQLWCHAR erfordert nämlich ein wchar_t (also Unicode) und den kann ich nicht so einfach wie gedacht einsetzen, ich hab das jetzt folgendermaßen gelöst:

    wchar_t DSN_Name[] = L"XU";
    ...
    rc = SQLConnect(hdbc1, DSN_Name, SQL_NTS, NULL, 0, NULL, 0);

    Aber trotzdem Danke!

    • Als Antwort markiert itsDeed Donnerstag, 30. August 2012 06:38
    Donnerstag, 30. August 2012 06:38

Alle Antworten

  • Am 29.08.2012 schrieb itsDeed:

    Ich bin zur Zeit dabei ein C Programm zu schreiben, das mit Hilfe von ODBC Daten in eine Tabelle in einer Access Datenbank schreiben soll. Hierfür hab ich auch schon eine Datenquelle angelegt mit dem Namen "XU" die direkt auf die Datenbank verweist.
    Wenn ich aber nun folgendes ausführe:

    #define DSN "XU"
    ...
    rc = SQLConnect(hdbc1, (SQLWCHAR *) DSN, sizeof(DSN), NULL, 0, NULL, 0);

    Hier findest Du die richtigen ODBC Verbindungsstrings:
    http://www.connectionstrings.com/

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Mittwoch, 29. August 2012 12:12
  • Das heißt anstelle von SQLConnect(), müsste dann ein ConnectionString stehen? Wie z.B.:

    Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;
    Und der Eintrag der DSN fällt komplett weg?


    Mittwoch, 29. August 2012 12:47
  • Am 29.08.2012 schrieb itsDeed:

    Das heißt anstelle von SQLConnect(), müsste dann ein ConnectionString stehen? Wie z.B.:

    Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;

    Und der Eintrag der DSN fällt komplett weg?

    Probier es aus, ich arbeite lieber DSNless, ist einfacher. ;)

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Mittwoch, 29. August 2012 13:04
  • Achso, wobei ich ja das Gefühl hab das es nicht direkt an der DSN liegt sondern daran das ich einfach ein char* zu einem SQLWCHAR* gemacht habe. Kann ich irgendwie umstellen das ich die ANSI-Funktionen nutzen kann, anstelle der Unicode-Funktionen? Also z.B. lieber SQLConnect anstelle von SQLConnectW? 
    Mittwoch, 29. August 2012 13:11
  • Am 29.08.2012 schrieb itsDeed:

    Achso, wobei ich ja das Gefühl hab das es nicht direkt an der DSN liegt sondern daran das ich einfach ein char* zu einem SQLWCHAR* gemacht habe. Kann ich irgendwie umstellen das ich die ANSI-Funktionen nutzen kann, anstelle der Unicode-Funktionen? Also z.B. lieber SQLConnect anstelle von SQLConnectW?

    Das kann ich dir nicht beantworten. Ich würde trotzdem erstmal mit
    einem Connectionstring versuchen einen einfachen SQL String
    abzusetzen, damit Du sicher sein kannst das es nicht am
    Connectionstring liegt.

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Mittwoch, 29. August 2012 20:03
  • Also vielen Dank Winfried aber ich hab das Problem gefunden.

    Es lag nicht direkt an der DSN sondern an der Übergabe des Namens, SQLWCHAR erfordert nämlich ein wchar_t (also Unicode) und den kann ich nicht so einfach wie gedacht einsetzen, ich hab das jetzt folgendermaßen gelöst:

    wchar_t DSN_Name[] = L"XU";
    ...
    rc = SQLConnect(hdbc1, DSN_Name, SQL_NTS, NULL, 0, NULL, 0);

    Aber trotzdem Danke!

    • Als Antwort markiert itsDeed Donnerstag, 30. August 2012 06:38
    Donnerstag, 30. August 2012 06:38
  • Am 30.08.2012 schrieb itsDeed:

    Also vielen Dank Winfried aber ich hab das Problem gefunden.
    Es lag nicht direkt an der DSN sondern an der Übergabe des Namens, SQLWCHAR erfordert nämlich ein wchar_t (also Unicode) und den kann ich nicht so einfach wie gedacht einsetzen, ich hab das jetzt folgendermaßen gelöst:

    wchar_t DSN_Name[] = L"XU";
    ...
    rc = SQLConnect(hdbc1, DSN_Name, SQL_NTS, NULL, 0, NULL, 0);

    Vielen Dank für die Lösungsrückmeldung. ;)

    Aber trotzdem Danke!

    Bitte, gern geschehen. ;)

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Donnerstag, 30. August 2012 07:30