【问题标题】:MFC ODBC SQLConfigDataSource() Unhandled ExceptionMFC ODBC SQLConfigDataSource() 未处理的异常
【发布时间】:2019-09-27 16:43:40
【问题描述】:

我正在尝试更新旧的 c++ MFC 程序,而当我尝试创建 DSN 时,SQLConfigDataSource 会导致未处理的异常。错误消息说:

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;

【问题讨论】:

    标签: c++ sql ms-access mfc odbc


    【解决方案1】:

    SQLConfigDataSource 的参数格式不正确。见:

    SQLConfigDataSource Function

    还有:

    ConfigDSN Function

    每一对都以一个空字节结束,整个列表是 以空字节终止。 (即两个空字节标记结束 列表。)

    我已经让这个工作了十多年了,称之为:

    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;
        }
    }
    

    请注意,前两个额外的空值是多余的,但它们没有害处。但最后一行遵循两个 null,列表结尾,规则。

    "Description=MS Access Database\0"
    

    您应该检查SQLConfigDataSource 的返回值。您可以按照诊断中的说明致电SQLInstallerError。此外,cmets 声明关键字和值不应包含?

    【讨论】:

      【解决方案2】:

      安装 Microsoft Access 数据库引擎 2016 Redistributable 时发生错误。我安装了 2010 Redistributable,它运行完美,没有任何问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        相关资源
        最近更新 更多