我开始的时候选择的事一个单文档的程序,后来我发觉不好 于是我就插入了个dailog对话框在工程中 我打算把表里的内容放在 dailog 上的list control控件上 所以出现了下面的问题 忘大家看看
首先我在CMy1App里定义了个 CString a2[200];
然后我做了个判断,再循环的把数据库表里的内容存到了数组里
代码如下
m_pSet->MoveFirst(); // fails if recordset is empty
int i=1;
while (!m_pSet->IsEOF()) {
pDC->TextOut(pText.x, pText.y, m_pSet->m_username);
app->a2[3*i-3]=m_pSet->m_username ;
pDC->TextOut(pText.x+1000, pText.y, m_pSet->m_password);
app->a2[3*i-2]=m_pSet->m_password ;
pDC->TextOut(pText.x+4000, pText.y, m_pSet->m_id);
app->a2[3*i-1]=m_pSet->m_id ;
i++;
m_pSet->MoveNext();
pText.y -= nLineHeight;
}
我想经过这个循环 数据库里表里的记录全部都存在数组里了
然后我在dailog 调用了这个数组 把数组中的内容一次显示在list control上,下面是我实现的语句
CMy1App *app1=(CMy1App*)AfxGetApp();
m_pSet1->MoveFirst(); // fails if recordset is empty
int k=1;
int nItem = m_list.GetItemCount ();
while (!m_pSet1->IsEOF())
{
m_list.InsertItem(nItem,_T(""));
m_list.SetItemText(nItem, 1, app1->a2[3*k-3]);
m_list.SetItemText(nItem, 2, app1->a2 [3*k-2]);
m_list.SetItemText(nItem, 3, app1->a2 [3*k-1]);
k++;
m_pSet1->MoveNext();
}
编译无错误 但运行时程序崩溃 哎 又奔溃,换了n种写法了 大家来看看 是哪出错了 再次感谢,需要你们的鼓励和支持啊
9 个解决方案
#1
两个可能:
1.
m_pSet这个变量没有获取记录集,就是说这个变量无效.
2.
CString a2[200];定义大小不够,只能存200/3=66个记录,可能你的记录超过66个了
你单步执行,看看是在哪条语句出的错
1.
m_pSet这个变量没有获取记录集,就是说这个变量无效.
2.
CString a2[200];定义大小不够,只能存200/3=66个记录,可能你的记录超过66个了
你单步执行,看看是在哪条语句出的错
#2
数据库里 记录没到66个
m_pSet这个变量时获取到了记录集的 应为我是先用m_pSet把得到的记录显示在了单文档上的 运行时单文档上正确的显示了数据库里的内容 如图[img=http://b224.photo.store.qq.com/psb?/d9aed2b0-41e5-4483-9745-263663d1cc83/i3R2Gu9qD2vwVcnPlwQU6nXNA5bGoBt735luC2Y9c.k!/b/YQnwj4VHIwAAYurqjIVoIgAA][/img]
#3
#4
问题可能出在listctrl的使用上!另外,试着不再用中间变量数组,而是在遍历数据库时直接读入listctrl中去~!
#5
另外,崩溃,怎么样的崩溃??
#6
list control 在dailog上 遍历的时候我是在单文档上遍历的
#7
我在dialog上添加了个按钮 按钮的作用是把数组里的记录赋值到list control上
下面是按钮里的代码 上面也写出来了的
CMy1App *app1=(CMy1App*)AfxGetApp();
m_pSet1->MoveFirst(); // fails if recordset is empty
int k=1;
int nItem = m_list.GetItemCount ();
while (!m_pSet1->IsEOF())
{
m_list.InsertItem(nItem,_T(""));
m_list.SetItemText(nItem, 1, app1->a2[3*k-3]);
m_list.SetItemText(nItem, 2, app1->a2 [3*k-2]);
m_list.SetItemText(nItem, 3, app1->a2 [3*k-1]);
k++;
m_pSet1->MoveNext();
}
我不会调试 具体是什么崩溃我不知道。那请问下 怎么学习程序的调试呢?
#8
CMy1App *app1=(CMy1App*)AfxGetApp();
// 在下面设置断点,运行时检查是否得到了CMy1App的指针?
m_pSet1->MoveFirst(); // fails if recordset is empty
int k=1;
int nItem = m_list.GetItemCount ();
while (!m_pSet1->IsEOF())
{
m_list.InsertItem(nItem,_T(""));
m_list.SetItemText(nItem, 1, app1->a2[3*k-3]);
m_list.SetItemText(nItem, 2, app1->a2 [3*k-2]);
m_list.SetItemText(nItem, 3, app1->a2 [3*k-1]);
k++;
m_pSet1->MoveNext();
}
#9
我试试看
#1
两个可能:
1.
m_pSet这个变量没有获取记录集,就是说这个变量无效.
2.
CString a2[200];定义大小不够,只能存200/3=66个记录,可能你的记录超过66个了
你单步执行,看看是在哪条语句出的错
1.
m_pSet这个变量没有获取记录集,就是说这个变量无效.
2.
CString a2[200];定义大小不够,只能存200/3=66个记录,可能你的记录超过66个了
你单步执行,看看是在哪条语句出的错
#2
数据库里 记录没到66个
m_pSet这个变量时获取到了记录集的 应为我是先用m_pSet把得到的记录显示在了单文档上的 运行时单文档上正确的显示了数据库里的内容 如图[img=http://b224.photo.store.qq.com/psb?/d9aed2b0-41e5-4483-9745-263663d1cc83/i3R2Gu9qD2vwVcnPlwQU6nXNA5bGoBt735luC2Y9c.k!/b/YQnwj4VHIwAAYurqjIVoIgAA][/img]
#3
#4
问题可能出在listctrl的使用上!另外,试着不再用中间变量数组,而是在遍历数据库时直接读入listctrl中去~!
#5
另外,崩溃,怎么样的崩溃??
#6
list control 在dailog上 遍历的时候我是在单文档上遍历的
#7
我在dialog上添加了个按钮 按钮的作用是把数组里的记录赋值到list control上
下面是按钮里的代码 上面也写出来了的
CMy1App *app1=(CMy1App*)AfxGetApp();
m_pSet1->MoveFirst(); // fails if recordset is empty
int k=1;
int nItem = m_list.GetItemCount ();
while (!m_pSet1->IsEOF())
{
m_list.InsertItem(nItem,_T(""));
m_list.SetItemText(nItem, 1, app1->a2[3*k-3]);
m_list.SetItemText(nItem, 2, app1->a2 [3*k-2]);
m_list.SetItemText(nItem, 3, app1->a2 [3*k-1]);
k++;
m_pSet1->MoveNext();
}
我不会调试 具体是什么崩溃我不知道。那请问下 怎么学习程序的调试呢?
#8
CMy1App *app1=(CMy1App*)AfxGetApp();
// 在下面设置断点,运行时检查是否得到了CMy1App的指针?
m_pSet1->MoveFirst(); // fails if recordset is empty
int k=1;
int nItem = m_list.GetItemCount ();
while (!m_pSet1->IsEOF())
{
m_list.InsertItem(nItem,_T(""));
m_list.SetItemText(nItem, 1, app1->a2[3*k-3]);
m_list.SetItemText(nItem, 2, app1->a2 [3*k-2]);
m_list.SetItemText(nItem, 3, app1->a2 [3*k-1]);
k++;
m_pSet1->MoveNext();
}
#9
我试试看