繁体   English   中英

Visual Studio C ++:调试断言失败

[英]Visual Studio C++ : Debug Assertion Failed

我最近尝试创建一个程序,该程序可以读取ODBC数据库,然后使用CRecordset类将条目写入Excel文件中,该程序可以完美地编译,但是问题出在执行中...

第一个错误:

调试断言失败!

程式:C:\\ Windows \\ system32 \\ mfc140ud.dll

文件:f:\\ dd \\ vctools \\ vc7libs \\ ship \\ atlmfc \\ include \\ afxwin1.inl

行:24

第二个错误:

调试断言失败!

程式:C:\\ Windows \\ system32 \\ mfc140ud.dll

文件:f:\\ dd \\ vctools \\ vc7libs \\ ship \\ atlmfc \\ src \\ mfc \\ dbcore.cpp

线:3312

这两个错误指向mfc140ud.dll文件,它不是缺少的文件,所以这不是问题。

这是引发异常的函数:

void parseDB(CRecordset &rs, const CString &SqlString, CString strOut) {

std::cout << "test2";

rs.Open(CRecordset::snapshot, SqlString, CRecordset::readOnly);
std::string entry;
std::fstream file;

std::cout << "test3";

while(!rs.IsEOF()) {

    std::cout << "test4";
    rs.GetFieldValue((short)0, strOut);
    CT2CA pszConvertedAnsiString = strOut; 
    entry = pszConvertedAnsiString;

    writeXLSX(entry.c_str(), file);

    rs.MoveNext();

}

rs.Close();

}

“ std :: cout <<” test“在这里用于调试,并且我的程序在显示“ test2”之后立即生成这些错误,因此我推断出该错误来自“ Open”行。

这是我初始化CRecordset的方法:

CString sDsn;
CDatabase db;
CRecordset rs(&db);
CString strOut;
CString SqlString;

然后,在切换情况下使用CALL SQL函数:

switch (sequence) {
        case 1:
            SqlString = "CALL GETCUSNAME(AGENTS)";
            break;
        case 2:
            SqlString = "CALL GETCUSNAME(CLIENT)";
            break;
        default:
            AfxMessageBox(_T("Wrong entry!"));
        }

我在许多站点上搜索,但找不到答案,这就是为什么在这里问一个问题,在此先感谢您。

第一个断言来自AfxGetResourceHandle抱怨说它没有正确设置。

通常会发生这种情况,因为您没有在应用程序开始时调用AfxWinInit (如果您有控制台应用程序,并且没有使用MFC向导进行设置,则很可能是这种情况),或者您正在编写从非MFC代码调用的MFC DLL,而您没有添加AFX_MANAGE_STATE(AfxGetStaticModuleState( )); 在每个外部可见功能的开始。

我相信第二个原因是因为MFC要求您将CALL查询用大括号括起来,例如: {CALL GETCUSNAME(AGENTS)} 否则,将无法识别该调用,并且代码执行将输入不应采用的路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM