sql - IM001 Driver does not support this function (ODBC) -
i'm building custom odbc driver.
my main method:
int main(int argc, char** argv) { sqlreturn status; //sqlhandle henv; //sqlhandle hstmt; sqlhenv henv; sqlhdbc dbc = 0; sqlhstmt hstmt; sqlchar connstrout[1024]; sqlsmallint x; // startup banner //printf(); messagebox(getdesktopwindow(), "odbc client\n\n", "driver", mb_ok); // show query executed printf("query: %s\n", "select visits traffic"); // allocate environment status = sqlallochandle(sql_handle_env, sql_null_handle, &henv); // check error odbc_chk_error(sql_handle_env, henv, status, ""); // set odbc version behaviour expected status = sqlsetenvattr(henv, sql_attr_odbc_version, (sqlpointer) sql_ov_odbc3, 0); check_status(status, (uchar*)"sqlsetenvattr", henv, sql_handle_env); // check error odbc_chk_error(sql_handle_env, henv, status, ""); // allocate connection status = sqlallochandle(sql_handle_dbc, henv, &dbc); // check error odbc_chk_error(sql_handle_env, henv, status, ""); // ----------- real connection takes place @ point status = sqldriverconnect(dbc, getdesktopwindow(), (unsigned char*) "dsn=mydsn", sql_nts, connstrout, 1024, &x, sql_driver_prompt); if (sql_succeeded(status)) { printf("connected\n"); printf("returned connection string was:\n\t%s\n", connstrout); //sqldisconnect(dbc); }
everything works when run main using sample client.
however, when try odbc testing tool odbcte32 or other odbc client(s) such sqldbx or qtodbc, once try establish connection using 'mydsn' (which using custom driver) get: [microsoft][odbc driver manager] driver not support function
i've implemented sqldriverconnect function create outconnectionstring reading key-value-pairs user dsn uses compiled driver dll.
i've defined skeletons odbc functions http://msdn.microsoft.com/en-us/library/windows/desktop/ms714562(v=vs.85).aspx
i compile custom diver using mingw compiler (32-bit). have windows 7 os 64-bit i'm running 32-bit odbc test tool.
this driving me crazy. don't understand specific function not supported in driver. again, have created skeletons needed functions. here's list:
sqlallocconnect , sqlallocenv , sqlallocstmt , sqlallochandle , sqlfreeconnect , sqlfreeenv , sqlfreestmt , sqlbindcol , sqlcancel , sqlconnect , sqldescribecol , sqldisconnect , sqlexecdirect , sqlexecute , sqlextendedfetch , sqlfetch , sqlgetcursorname , sqlnumresultcols , sqlprepare , sqlrowcount , sqlsetcursorname , sqlcolumns , sqldriverconnect , sqlgetdata , sqlgetinfo , sqlgettypeinfo , sqlparamdata , sqlputdata , sqlstatistics , sqltables , sqlbrowseconnect , sqlcolumnprivileg, sqldescribeparam , sqlforeignkeys , sqlmoreresults , sqlnativesql , sqlnumparams , sqlprimarykeys , sqlprocedurecolum, sqlprocedures , sqlsetpos , sqltableprivilege, sqlbindparameter , sqlclosecursor , sqlcolattribute , sqlcopydesc , sqlendtran , sqlfetchscroll , sqlfreehandle , sqlgetconnectattr, sqlgetdescfield , sqlgetdescrec , sqlgetdiagfield , sqlgetdiagrec , sqlgetenvattr , sqlgetstmtattr , sqlsetconnectattr, sqlsetdescfield , sqlsetdescrec , sqlsetenvattr , sqlsetstmtattr , sqlbulkoperations, sqlspecialcolumns.
edit:
figured out. sqldisconnect defined incorrectly. make sure parameters passed correct. right definition was:
retcode sql_api sqldisconnect(sqlhdbc phandle) { __chk_handle(phandle, sql_handle_dbc, sql_error); _sqlfreediag(_diagconn(phandle)); _sqldisconnect((pgenodbcconn) phandle); return (sql_success); }
the way figured out: create .def file (name same driver dll file name, i.e. in case axodbc.def), list functions present in driver in it, following:
library axodbc description "driver 1 definitions" exports sqlallocconnect sqlallocenv sqlallocstmt sqlallochandle sqlfreeconnect sqlfreeenv sqlfreestmt sqlbindcol sqlcancel sqlconnect sqldescribecol sqlexecdirect sqlexecute sqldisconnect sqlextendedfetch sqlfetch sqlgetcursorname sqlnumresultcols sqlprepare sqlrowcount sqlsetcursorname sqlcolumns sqldriverconnect sqlgetdata sqlgetinfo sqlgettypeinfo sqlparamdata sqlputdata sqlstatistics sqltables sqlbrowseconnect sqlcolumnprivileges sqldescribeparam sqlforeignkeys sqlmoreresults sqlnativesql sqlnumparams sqlprimarykeys sqlprocedurecolumns sqlprocedures sqlsetpos sqltableprivileges sqlbindparameter sqlclosecursor sqlcolattribute sqlcopydesc sqlendtran sqlfetchscroll sqlfreehandle sqlgetconnectattr sqlgetdescfield sqlgetdescrec sqlgetdiagfield sqlgetdiagrec sqlgetenvattr sqlgetstmtattr sqlsetconnectattr sqlsetdescfield sqlsetdescrec sqlsetenvattr sqlsetstmtattr sqlbulkoperations sqlspecialcolumns
compile dll (using mingw (g++)) , include .def file, like:
g++ -shared -o axodbc.dll axodbc.cpp connectionmanager.cpp diagnostics.cpp myresources.res axodbc.def -lodbc32 -lodbccp32
compiler gave me error @ point sqldisconnect defined incorrectly
i don't sqlgetfunctions in list. can enable odbc tracing in driver manager , show odbc calls made , result was.
Comments
Post a Comment