Подключиться к базе данных доступа.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.