Подключиться к базе данных доступа.accdb, используя объект aC# activeX в Windows 7 и CVI 9.0.1

Я пытаюсь подключиться к базе данных доступа.accdb, используя объект 32 activeX в CVI 9.0.1. Я могу нормально подключиться к файлу.mdb, но когда я пытаюсь.accdb, функция проходит нормально, но connectFlag возвращает 0, указывая, что ему не удалось подключиться к файлу. Я могу использовать точно такой же код в WindowsXP, и он прекрасно работает как для файлов.accdb, так и для файлов.mdb. Я проверил, что драйверы доступа существуют в C:\Windows\SysWOW64\odbcad32.exe

Драйвер Microsoft Accees (*.mdb, *.accdb) версия 14.00.7010.1000

Я также могу подключиться к той же базе данных на моем компьютере с Windows 7 с помощью Visual Studio 2010. Я также загрузил пробную версию CVI SqlTool Kit и смог подключиться к базе данных.accdb с помощью DSN. Я также скачал копию 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, что означает, что он не подключился. Любые предложения будут высоко оценены, спасибо.

-Джастин

1 ответ

Что касается моего комментария выше, я использовал следующие строки подключения (когда не используются DSN) для всех версий CVI:

//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.

Другие вопросы по тегам