【问题标题】:connect to an access .accdb database using a c# activeX object in Windows 7 and CVI 9.0.1在 Windows 7 和 CVI 9.0.1 中使用 c# activeX 对象连接到访问 .accdb 数据库
【发布时间】:2014-01-13 17:56:23
【问题描述】:

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

-贾斯汀

【问题讨论】:

  • 我在 Windows XP 上使用带有 cvidb32.dll 和 .mdb 和 .accdb 文件的 CVI 版本 8x、9x、... 12sp1(并且已经成功多年)。在 Windows 7 上,MS Access 存在 UAC 问题。我经常使用访问博客来了解如何处理它们。从你的问题描述来看,你可能也有类似的问题。

标签: ms-access database-connection activex cvi


【解决方案1】:

关于我上面的评论,我对所有 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 有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    相关资源
    最近更新 更多