Datebanke SQLDriverConnect bleibt hängen wenn DB bereit exklusiv geöffnen ist.
-
Folgender Code:
die funktiobn SQLDriverConenct funktioniert wunderbar, aber sobald die datenbank schon geöffent ist, bleibt das programm an der stelle hängen. Wäre wenigstens froh wenn ich ne rückmeldung bekommen würde, das die DB exklusiv geöffnet ist oder so.
Debug("SQLDriverConnect\n"); rc = SQLDriverConnect (pThreadParameter->DBPara.hdbc, NULL, inConnectString, SQL_NTS, outConnectString, sizeof (outConnectString), &length, SQL_DRIVER_COMPLETE); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { printSQLError (pThreadParameter->DBPara.hdbc, SQL_NULL_HSTMT); return ERROR_CONNECT_DB; } Debug("SQLAllocHandle '0x%08lx'\n", pThreadParameter->DBPara.hstmt);
-
Welchen ODBC Treiber nutzt Du?
Nutzt SQL_DRIVER_NOPROMPT?
-
Ist ein MS Access ODBC Treiber 4.00.6340.0 ODBC 3.0
Hier der code um die Datenbank parameter zu initialisieren:
pThreadParameter->DBPara.szDSN = DB_NAME; //Microsoft Access Driver (*.mdb) Debug("Open Database. DNS: '%s' User: '%s' ThreadID: '0x%08lx'\n", pThreadParameter->DBPara.szDSN, DB_USERNAME, GetCurrentThreadId()); rc = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &pThreadParameter->DBPara.henv); Debug("Alloc Environment\n"); if (rc != 0) { Debug("Alloc Environment failed\n"); return ERROR_CONNECT_DB; } Debug("SQLSetEnvAttr\n"); rc = SQLSetEnvAttr(pThreadParameter->DBPara.henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); if (rc != 0) { Debug("SQLSetEnvAttr failed\n"); return ERROR_CONNECT_DB; } Debug("SQLAllocHandle\n"); rc = SQLAllocHandle (SQL_HANDLE_DBC, pThreadParameter->DBPara.henv, &pThreadParameter->DBPara.hdbc); if (rc != 0) { Debug("SQLAllocHandle failed\n"); return ERROR_CONNECT_DB; } /* Connect to data source */ sprintf ((char*)inConnectString, //"DRIVER={Microsoft Access Driver (*.mdb)}; DSN=%s; UID=%s; PWD=%s;", "DSN=%s; UID=%s; PWD=%s;", DB_NAME, DB_USERNAME, DB_PASSWORD);nehem "SQL_DRIVER_COMPLETE" wie in SQLDriverConnect als parameter angegeben, oder soll ich "SQL_DRIVER_NOPROMT" nehmen?
-
Versuch es mal mit SQL_DRIVER_NOPROMPT!
Ansonsten empfehle ich die an die MSDN zu lesen.
Warum wählst Du überhaupt den üblen Weg des puren ODBC?
Warum verwendest Du nicht de MFC Klassen?
Oder noch einfacher ADO?
Oder OLEDB?Das ODBC Interface gehört für mich zu den Dingen die ich grundsätzlich umgehe.
-
hehe.. ja martin.. ich hab die üble aufgabe den scheiss zu debuggen .. das ganze ding ist ein OCX.. weis nich wieso die es über DNS machen etc. Ist nich mein projekt.. ich persönlich hätte das ganze auch mit ADO gemacht.. naja aber will hier nichts ummodeln.. du meinst mit SQL_DRIVER_NOPROMPT statt SQL_DRIVER_COMPLETE nehmen?
mit SQL_DRIVER_NOPROMPT hat geklappt danke