2014-01-13 3 views
0

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

Microsoft Accees Driver (* .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 означает, что он не подключен. Любые предложения были бы очень благодарны.

-Джастин

+0

Я (и успешно на протяжении многих лет) использую CVI версии 8x, 9x, ... 12sp1 с cvidb32.dll с файлами .mdb и .accdb в Windows XP. В Windows 7 есть проблемы с UAC с MS Access. Я часто использовал _Access blogs_, чтобы знать, как с ними бороться. Это звучит из вашего описания проблемы, у вас могут быть похожие проблемы. – ryyker

ответ

0

Относительно мой комментарий выше, я использовал следующие строки CONNECT (если не используется DSNs) для всех версий ХВН:

//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"); 

и следующее при использовании DSNs:

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

Но, как я уже сказал в комментарии, описание проблемы предлагает проблемы с UAC, связанные с MS Access.