我用DAO連接ACCESS資料庫,初始化List Control控制元件后,讀取ACCESS資料庫data.mdb中的表road使其顯示在List Control控制元件中,編譯沒問題,執行時出現Debug Assertion Failed!錯誤。VC++新手妹紙一枚,已經折騰了好幾天依然沒能解決啊啊啊啊啊,懇請各位壇友指點!
下面是我寫的代碼:首先是在Roadview.cpp中,初始化List Control控制元件,
BOOL CRoadview::OnInitDialog()
{
CDialog::OnInitDialog();
CFont m_ListFont;
m_ListFont.CreatePointFont(120,"宋體");
DWORD dwExStyle = m_listroad_view.GetExStyle();
dwExStyle&=~LVS_EX_CHECKBOXES;
m_listroad_view.SetFont(&m_ListFont);
m_listroad_view.SetExtendedStyle(dwExStyle|LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKA CTIVATE);
TEXTMETRIC tm;
CDC*pDC=GetDC();
pDC->GetTextMetrics(&tm);
m_listroad_view.InsertColumn(0,"路段編號",LVCFMT_CENTER,90,0);
m_listroad_view.InsertColumn(1,"路段起點",LVCFMT_CENTER,160,0);
m_listroad_view.InsertColumn(2,"路段半徑",LVCFMT_CENTER,120,0);
m_listroad_view.InsertColumn(3,"路段長度",LVCFMT_CENTER,120,0);
m_listroad_view.InsertColumn(4,"路段超高",LVCFMT_CENTER,120,0);
m_listroad_view.InsertColumn(5,"彎曲方向",LVCFMT_CENTER,90,0);
m_listroad_view.InsertColumn(6,"坡度",LVCFMT_CENTER,90,0);
m_listroad_view.InsertColumn(7,"交通量",LVCFMT_CENTER,120,0);
m_listroad_view.InsertColumn(8,"設計速度",LVCFMT_CENTER,120,0);
// TODO: Add extra initialization here
return TRUE;
}
結果如下圖所示

我的資料表如下圖:

然后添加讀取資料的代碼如下:
void CMHCSView::OnRoadView()編譯沒錯后執行,結果如下:
{
COleVariant var; // 欄位型別
var.ChangeType(VT_BSTR,NULL);
CListCtrl m_listroad_view;
m_listroad_view.DeleteAllItems();//清空表
CDaoDatabase db;
CDaoRecordset RecSet(&db);
db.Open("data.mdb");
RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM road",NULL);
CString str[9];
int i=0;
int j=0;
while(!RecSet.IsEOF())
{
RecSet.GetFieldValue("ID",var);
str[0]=var.intVal;
RecSet.GetFieldValue("start",var);
str[1]=(LPCSTR)var.pbstrVal;
RecSet.GetFieldValue("radius",var);
str[2].Format("%10.6f",var.dblVal);
RecSet.GetFieldValue("length",var);
str[3].Format("%10.6f",var.dblVal);
RecSet.GetFieldValue("superelevation",var);
str[4].Format("%10.6f",var.dblVal);
RecSet.GetFieldValue("direction",var);
str[5]=var.intVal;
RecSet.GetFieldValue("grade",var);
str[6].Format("%10.6f",var.dblVal);
RecSet.GetFieldValue("volume",var);
str[7]=var.intVal;
RecSet.GetFieldValue("velocity",var);
str[8].Format("%d",(LPCSTR)var.pbstrVal);
m_listroad_view.InsertItem(m_listroad_view.GetItemCount(), "");
for(j=0;j<=7;j++)
m_listroad_view.SetItemText(i,j,str[j]);
i=i+1;
RecSet.MoveNext();
}
RecSet.Close();
db.Close();
CRoadview rv;
rv.DoModal();
// TODO: Add your command handler code here
}

到底問題出在哪兒呢???

uj5u.com熱心網友回復:
妹紙好!看不出任何問題。
你需要在OnRoadView() / OnInitDialog() 分別打個斷點,單步執行,看程式哪個地方哪個陳述句會崩掉?
另外,OnRoadView()內定義了m_listroad_view怎么跟全域變數的名稱一樣?雖然可以一樣,但是不規范啊,容易誤解啊。
m_表示的是成員變數, 你的這個是區域變數!
uj5u.com熱心網友回復:
斷點除錯這種的不會用,看不懂啊。。。
uj5u.com熱心網友回復:
打斷點,F10單步執行,看哪一句代碼會崩潰,就有針對性去分析了。
uj5u.com熱心網友回復:
Debug模式下,打開call stack,看看函式呼叫堆疊,找到出錯的函式呼叫先~uj5u.com熱心網友回復:
直接編譯器查看呼叫堆疊,一直回溯到你的代碼uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。uj5u.com熱心網友回復:
斷點的位置怎么確定的呢?
斷點除錯這種的不會用,看不懂啊。。。
打斷點,F10單步執行,看哪一句代碼會崩潰,就有針對性去分析了。
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。
我在這里設了個斷點

然后結果變成

懵。。。
uj5u.com熱心網友回復:
妹紙好!
看不出任何問題。
你需要在OnRoadView() / OnInitDialog() 分別打個斷點,單步執行,看程式哪個地方哪個陳述句會崩掉?
另外,OnRoadView()內定義了m_listroad_view怎么跟全域變數的名稱一樣?雖然可以一樣,但是不規范啊,容易誤解啊。
m_表示的是成員變數, 你的這個是區域變數!
斷點除錯這種的不會用,看不懂啊。。。
打斷點,F10單步執行,看哪一句代碼會崩潰,就有針對性去分析了。
斷點的位置怎么確定的呢?
斷點除錯這種的不會用,看不懂啊。。。
打斷點,F10單步執行,看哪一句代碼會崩潰,就有針對性去分析了。
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。
我在這里設了個斷點
然后結果變成
懵。。。
工程打包,哥幫你調。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/115438.html
標籤:基礎類
上一篇:一個關于C++串口編程的問題
