我在MFC中定义了个数组,然后把数据库里的表的记录存在里面,大家看看我的语句哪有问题?

时间:2021-07-05 05:05:14
数据库里的表有username password id 3个列 这3个列的类型都是 nchar
我开始的时候选择的事一个单文档的程序,后来我发觉不好 于是我就插入了个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个了
你单步执行,看看是在哪条语句出的错

#2


引用 1 楼  的回复:
两个可能:
1.
m_pSet这个变量没有获取记录集,就是说这个变量无效.
2.
CString a2[200];定义大小不够,只能存200/3=66个记录,可能你的记录超过66个了
你单步执行,看看是在哪条语句出的错

数据库里 记录没到66个
m_pSet这个变量时获取到了记录集的 应为我是先用m_pSet把得到的记录显示在了单文档上的 运行时单文档上正确的显示了数据库里的内容  如图[img=http://b224.photo.store.qq.com/psb?/d9aed2b0-41e5-4483-9745-263663d1cc83/i3R2Gu9qD2vwVcnPlwQU6nXNA5bGoBt735luC2Y9c.k!/b/YQnwj4VHIwAAYurqjIVoIgAA][/img]

#3


我在MFC中定义了个数组,然后把数据库里的表的记录存在里面,大家看看我的语句哪有问题?

#4


问题可能出在listctrl的使用上!另外,试着不再用中间变量数组,而是在遍历数据库时直接读入listctrl中去~!

#5


另外,崩溃,怎么样的崩溃??

#6


引用 4 楼  的回复:
问题可能出在listctrl的使用上!另外,试着不再用中间变量数组,而是在遍历数据库时直接读入listctrl中去~!

list control 在dailog上 遍历的时候我是在单文档上遍历的

#7


引用 5 楼  的回复:
另外,崩溃,怎么样的崩溃??

我在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个了
你单步执行,看看是在哪条语句出的错

#2


引用 1 楼  的回复:
两个可能:
1.
m_pSet这个变量没有获取记录集,就是说这个变量无效.
2.
CString a2[200];定义大小不够,只能存200/3=66个记录,可能你的记录超过66个了
你单步执行,看看是在哪条语句出的错

数据库里 记录没到66个
m_pSet这个变量时获取到了记录集的 应为我是先用m_pSet把得到的记录显示在了单文档上的 运行时单文档上正确的显示了数据库里的内容  如图[img=http://b224.photo.store.qq.com/psb?/d9aed2b0-41e5-4483-9745-263663d1cc83/i3R2Gu9qD2vwVcnPlwQU6nXNA5bGoBt735luC2Y9c.k!/b/YQnwj4VHIwAAYurqjIVoIgAA][/img]

#3


我在MFC中定义了个数组,然后把数据库里的表的记录存在里面,大家看看我的语句哪有问题?

#4


问题可能出在listctrl的使用上!另外,试着不再用中间变量数组,而是在遍历数据库时直接读入listctrl中去~!

#5


另外,崩溃,怎么样的崩溃??

#6


引用 4 楼  的回复:
问题可能出在listctrl的使用上!另外,试着不再用中间变量数组,而是在遍历数据库时直接读入listctrl中去~!

list control 在dailog上 遍历的时候我是在单文档上遍历的

#7


引用 5 楼  的回复:
另外,崩溃,怎么样的崩溃??

我在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


我试试看