Необработанное исключение MFC ODBC SQLConfigDataSource ()

Я пытаюсь обновить старую программу MFC на C ++, и SQLConfigDataSource вызывает необработанное исключение, когда я пытаюсь создать DSN. В сообщении об ошибке говорится:

Необработанное исключение в 0x00007FFC97D89129 (KernelBase.dll): 0x0000087A (параметры: 0xFFFFFFFF887A0001, 0x0000000000000053)

Код работает правильно и работает должным образом, но я не могу избавиться от этой ошибки.

int mlen;
char* szDesc = new char[256];
sprintf_s(szDesc, 256, "DSN=%s?DBQ=%s?FIL=MicrosoftAccess?",
    IV_DATABASE_NAME, // DSN name
    sDBPath); // full file name for accdb file

mlen = strlen(szDesc);
for (int i = 0; i < mlen; i++) {
    if (szDesc[i] == '?')
        szDesc[i] = '\0';
}

SQLConfigDataSource(NULL, ODBC_ADD_DSN,
    "Microsoft Access Driver (*.mdb, *.accdb)",
    (LPCSTR)szDesc);

delete szDesc;

person Hunter    schedule 27.09.2019    source источник


Ответы (2)


Аргументы в пользу SQLConfigDataSource плохо сформулированы. Видеть:

Функция SQLConfigDataSource

И:

Функция ConfigDSN

Каждая пара завершается нулевым байтом, а весь список завершается нулевым байтом. (То есть два нулевых байта отмечают конец списка.)

У меня это работает уже более десяти лет, и я называю это так:

if( ! bOk )//failed to open the default database for lack of DSN
{
    TRACE("Could not find DSN\n");

    BOOL ret= SQLConfigDataSource(
        NULL,
        ODBC_ADD_DSN,
        (LPSTR) "Microsoft Access Driver (*.mdb)\0",
        (LPSTR) "DSN=MS Access Database\0"
        "Description=MS Access Database\0"
        );
    if( ! ret )
    {
        AfxMessageBox( _T("The 'Data Source Name' failed to install\nPlease call My Company\n800-555-5555") );
        return FALSE;
    }
}

Обратите внимание, что первые два дополнительных нуля избыточны, но они не причиняют вреда. Но последняя строка следует за двумя пустыми правилами конца списка.

"Description=MS Access Database\0"

Вы должны проверять возвращаемое значение SQLConfigDataSource. И вы можете вызвать SQLInstallerError, как описано в разделе "Диагностика". Кроме того, в комментариях указано, что ключевые слова и значения не должны содержать ?.

person lakeweb    schedule 28.09.2019

Ошибка возникала при установке распространяемого компонента Microsoft Access Database Engine 2016. Я установил распространяемый пакет 2010, и он отлично работает без каких-либо проблем.

person Hunter    schedule 30.09.2019