简体   繁体   English

无法使用C ++,ODBC连接Access数据库

[英]Cannot connect access database using c++,odbc

The rc return -1 but i can't get any error message and status after calling SQLGetDiagRec rc返回-1,但是在调用SQLGetDiagRec之后我无法获得任何错误消息和状态

SQLRETURN rc;
SQLHENV henv1 = NULL;
SQLHDBC hdbc1= NULL;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv1);
SQLSetEnvAttr(henv1,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);
rc =SQLAllocHandle(SQL_HANDLE_DBC, henv1, &hdbc1);

char szDSN[256] = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN=data;DBQ=D:\\data\\data.accdb;";
char out[256];
int     iConnStrLength2Ptr;
rc = SQLDriverConnect(hdbc1, NULL, (SQLWCHAR*)&szDSN, SQL_NTS, (SQLWCHAR*)&out,255, (SQLSMALLINT*)&iConnStrLength2Ptr, SQL_DRIVER_NOPROMPT);

SQLWCHAR SQLState[256];
SQLINTEGER NativeErrorPtr;
SQLWCHAR MessageText[256];
SQLSMALLINT TextLengthPtr = 255;
SQLGetDiagRec(SQL_HANDLE_ENV,henv1,1,(SQLWCHAR*)SQLState,&NativeErrorPtr,(SQLWCHAR*)MessageText,255,&TextLengthPtr);

You are not really showing the error testing part of the code. 您并没有真正显示代码的错误测试部分。 After SQLDriverConnect you should check !SQL_SUCCEEDED(rc). 在SQLDriverConnect之后,您应该检查!SQL_SUCCEEDED(rc)。 The call to SQLGetDiagRec is on the environment handle but the error occurred on a connection handle so you probably want to change your call to SQLGetDiagRec. 对SQLGetDiagRec的调用在环境句柄上,但是在连接句柄上发生了错误,因此您可能希望将对SQLGetDiagRec的调用更改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM