0

我正在尝试使用 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 表示未连接。任何建议将不胜感激谢谢。

-贾斯汀

4

1 回答 1

0

关于我上面的评论,我对所有 CVI 版本都使用了以下连接字符串(不使用 DSN 时):

//giAmsIndex = DBConnect ("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\dev\\DB\\New_AMS_Index.accdb");
//giAmsData = DBConnect (""Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\dev\\DB\\New_AMS_000");  

以及使用 DSN 时的以下内容:

hAmsIndex   = DBConnect ("DSN=New_AMS_Index");
hAmsData    = DBConnect ("DSN=New_AMS_000");

但正如我在评论中所说,您的问题描述表明 UAC 问题与 MS Access 有关。

于 2014-01-20T21:48:32.657 回答