Мне было поручено перенести некоторый код C ++ в Win 10, который был написан более 10 лет назад, а первоначальный разработчик недоступен.
Его код звонит на
SQLConfigDataSource(NULL, ODBC_CONFIG_SYS_DSN, _T("Microsoft Access Driver (*.mdb)"), cfgs);
где cfgs это что-то вроде
const char *cfgs=
"DSN=ExportBase\0"
"Drv=c:\\winnt\\system32\\odbcjt32.dll\0"
"DBQ=c:\\export\\exportbase.mdb\0"
"DriverId=25\0"
"FIL=MS Access;\0"
"PWD=password1\0"
"UID=Admin\0"
"SafeTrans=0\0\0";
Проблема в том, что этот вызов не завершается успешно, и вызов SQLInstallerError для получения сообщения возвращает строку типа
сбой ConfigDSN, ConfigDriver или ConfigTranslator драйвера.
(собственно, я перевожу это сообщение с французского оригинала).
Я попытался упростить строку cfgs до минимума:
"DSN=Database2\0UiD=Admin\0PWD=pWD\0DBQ=D:\\devt\\CPP\\MFC\\ODBCTest1\\Database2.mdb\0Drv=c:\\winnt\\system32\\odbcjt32.dll\0\0";
но даже тогда вызов не удался.
Однако если я заменим ODBC_CONFIG_SYS_DSN на ODBC_ADD_DSN и изменим имя DSN, вызов будет успешным и создаст новый источник данных.
Я должен указать, что:
1) Я не знаю, почему предыдущий разработчик вызывал эту функцию (
тот же эффект, вероятно, можно было бы сделать с источником данных ODBC
Администратор).
2) Я не знаю точно, что это за функция
делать в случае «обновления» в любом случае. Что обновляется, что
такое ключевые поля?
3) Не очевидно, что все атрибуты в любом случае актуальны.
4) Документ Microsoft по этому вопросу очень краткий.