簡體   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