gpt4 book ai didi

c++ - Visual Studio C++ : Debug Assertion Failed

转载 作者:行者123 更新时间:2023-11-30 03:40:56 29 4
gpt4 key购买 nike

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

第一个错误:

Debug Assertion Failed!

Program: C:\Windows\system32\mfc140ud.dll

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

Line: 24

第二个错误:

Debug Assertion Failed!

Program: C:\Windows\system32\mfc140ud.dll

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

Line: 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;

然后,我在 switch-case 中使用 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)}。否则无法识别调用,并且代码执行会进入不应采用的路径。

关于c++ - Visual Studio C++ : Debug Assertion Failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37651704/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com