我正在尝试使用 CVI 9.0.1 中的 32 activeX 对象连接到访问 .accdb 数据库。我能够很好地连接到 .mdb 文件,但是当我尝试 .accdb 时,函数运行得很好,但 connectFlag 返回一个 0 表示它无法连接到文件。我能够在 WindowsXP 中使用完全相同的代码,并且它对 .accdb 和 .mdb 文件都适用。我已验证访问驱动程序确实存在于 C:\Windows\SysWOW64\odbcad32.exe
Microsoft Accees 驱动程序(*.mdb、*.accdb)版本 14.00.7010.1000
我还可以使用 Visual Studio 2010 连接到我的 windows 7 机器上的同一个数据库。我还下载了 CVI SqlTool Kit 的试用版,并且能够使用 DSN 连接到 .accdb 数据库。我还下载了 CVI 2013 的副本,认为我的版本可能仅在 32 位中运行并且无法看到 SysWOW64 文件夹,但是我在 CVI 2013 中得到了相同的结果。
我已经包含了下面的代码......
HRESULT result = 0;
ERRORINFO errorStruct;
char * dbPtr = NULL;
char * SQLptr = NULL;
char * record = NULL;
VBOOL connectFlag;
CAObjHandle databaseObj = 0;
// database connection strings
char dbLocation[] = "DSN=test" ;
char dbLocation[] = "c:\\obsoleteparts.mdb" ;
char dbLocation[] = "c:\\serialnumbers.accdb" ;
char sqlStr[]= "SELECT tblSerialNumbers.serialNumber FROM(tblSerialNumbers) WHERE tblSerialNumbers.prefix='05-' ORDER BY tblSerialNumbers.serialNumber DESC";
prjAxDatabaseObj__Recordset rsObj;
dbPtr = dbLocation;
SQLptr = sqlStr;
errorTxt[0] = 0;
result = prjAxDatabase_New_axDatabase (NULL, 1, LOCALE_NEUTRAL, 0,&databaseObj );
result = prjAxDatabase__axDatabaseConnect (databaseObj, &errorStruct, &dbPtr, &connectFlag);
CA_DisplayErrorInfo (databaseObj,"error",result,&errorStruct)
代码运行正常,不显示错误,结果显示操作成功,但是 connectFlag 返回 0 表示未连接。任何建议将不胜感激谢谢。
-贾斯汀