作了一个小的信息管理系统,按照书上的源码输入,编译通过
但在运行时,如果要编辑一个记录的话,确定后确会报错.
基本内容如下:
Debug Assertion Failedfile:strex.cpp
Line:672一会儿编辑另一个记录又会报错说错在另一行(Line:512)
怎么回事啊??有没有调试方面的教材?
但在运行时,如果要编辑一个记录的话,确定后确会报错.
基本内容如下:
Debug Assertion Failedfile:strex.cpp
Line:672一会儿编辑另一个记录又会报错说错在另一行(Line:512)
怎么回事啊??有没有调试方面的教材?
解决方案 »
- 为什么不显示窗口
- 怎么判断客户端不同按钮事件并在服务器端显示
- 怎么设置文件路径?
- 无法执行添加/移除操作,因为代码元素“CSimpleChatDlg"是只读。这是什么意思?
- c window 图形编程 窗口最小化后,再激活, 出现异常:如之前在窗口中所画的图形发生改变, 题目栏不能全部显示, 请教各位
- Cannot open include file: 'atltypes.h'
- _ultoa转换无符号长整型,哪个转换无符号int型为字符串?
- 怎样在vc下 将资源文件rc编译成 res文件
- 一个找路径的小问题
- 原来是基于对话框的程序,现在希望在按键响应后能有生成多文档的效果,怎么办勒?
- 多线程运行时,系统有哪些操作会夺走其cpu控制权?
- 各位老大救命啊!!我的程序在存储数据时出错了!!
有个call stack看看是那个函数出错
void CDemo02View::EditCurUser()
{
CListCtrl *ctl;
ctl=&GetListCtrl();
//Ñ°ÕÒλÖÃ
POSITION pos=ctl->GetFirstSelectedItemPosition();
if(pos==NULL)
{
//ûÓÐÍ˳ö
AfxMessageBox("ÇëÏÈÑ¡ÖÐÒ»Ìõ¼Ç¼");
return;
}
//»ñÈ¡µ±Ç°Î»ÖÃ
int m_CurUser=ctl->GetNextSelectedItem(pos);
//
CUserDlg m_UserDlg;
char chrTemp[21]={'\0'};
ctl->GetItemText(m_CurUser,1,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserName=chrTemp;
ctl->GetItemText(m_CurUser,2,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserPwd=chrTemp;
ctl->GetItemText(m_CurUser,3,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserAble=chrTemp;
ctl->GetItemText(m_CurUser,4,chrTemp,sizeof(char[4]));
m_UserDlg.m_UserSex=chrTemp;
ctl->GetItemText(m_CurUser,5,chrTemp,sizeof(char[50]));
m_UserDlg.m_UserAddr=chrTemp;
ctl->GetItemText(m_CurUser,6,chrTemp,sizeof(char[50]));
m_UserDlg.m_UserDep=chrTemp;
ctl->GetItemText(m_CurUser,7,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserTitle=chrTemp;
ctl->GetItemText(m_CurUser,8,chrTemp,sizeof(char[50]));
m_UserDlg.m_UserEmail=chrTemp;
ctl->GetItemText(m_CurUser,9,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserPhone=chrTemp;
ctl->GetItemText(m_CurUser,10,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserInfo=chrTemp;
//update
// m_UserDlg.DoModal(); //m_UserDlg.m_UserInfo=chrTemp;
m_UserDlg.m_Title="ÐÞ¸ÄÓû§ÐÅÏ¢";
if(m_UserDlg.DoModal()!=IDOK)
{
return;
}
//Èç¹ûÈ·¶¨ÁËÑ¡Ôñ
ctl->GetItemText(m_CurUser,0,chrTemp,sizeof(char[20]));
//½«Óû§IDת»»ÎªÕýÊý±£´æ,ºóÃæµÄÊý¾Ý¿â²Ù×÷ÒÑ´ËΪÌõ¼þ
int m_CurUserID=atoi(chrTemp);
CUserRecordSet m_UserRecordSet;
try
{
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//Æ¥ÅäÌõ¼þUserID=m_CuruserID
m_UserRecordSet.m_strFilter.Format("UserID='%' order by UserID",m_CurUserID);
m_UserRecordSet.Open(CRecordset::snapshot,NULL,CRecordset::none);
//Èç¹ûÓû§¼Ç¼´æÔÚ,½øÐÐÐÞ¸Ä
if(m_UserRecordSet.Open()&&!m_UserRecordSet.IsEOF())
{
//ÉèÖñ༭µ±Ç°¼Ç¼
m_UserRecordSet.Edit();
//¿ªÊ¼±à¼­
m_UserRecordSet.m_UserAble=m_UserDlg.m_UserAble;
m_UserRecordSet.m_UserAddr=m_UserDlg.m_UserAddr;
m_UserRecordSet.m_UserDep=m_UserDlg.m_UserDep;
m_UserRecordSet.m_UserEmail=m_UserDlg.m_UserEmail;
m_UserRecordSet.m_UserInfo=m_UserDlg.m_UserEmail;
m_UserRecordSet.m_UserName=m_UserDlg.m_UserName;
m_UserRecordSet.m_UserPhone=m_UserDlg.m_UserPhone;
m_UserRecordSet.m_UserPwd=m_UserDlg.m_UserPwd;
m_UserRecordSet.m_UserSex=m_UserDlg.m_UserSex;
m_UserRecordSet.m_UserTitle=m_UserDlg.m_UserTitle;
//¸üе½Êý¾Ý¿âÖÐ
if(m_UserRecordSet.CanUpdate())
{
m_UserRecordSet.Update();
}
//¹Ø±Õ¼Ç¼¼°
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
AfxMessageBox("Ð޸ijɹ¦!");
}
else //¿¼ÂÇÌØÁÐ,Èç¹û²Ù×÷ÖÐÓû§ÐÅÏ¢²»´æÔÚÁË
{
//close database
if(m_UserRecordSet.IsOpen())
m_UserRecordSet.Close();
//ÌáʾÓû§
AfxMessageBox("¸Ã¼Ç¼²»´æÔÚ,ÎÞ´ÓÐÞ¸Ä!");
return;
}
}
catch(CDBException* e)
{
e->ReportError();
return;
}
//Èç¹û´¦Àíµ½ÕâÀï,ÄÇ´¦ÀíÐ޸ĺó²»ÄÜÂíÉÏ¿´µ½½á¹û
//ËùÒÔ»¹Òª½«Óû§ÐÅÏ¢¼°Ê±¸üе½ListCtrlÖÐ
ctl->SetItemText(m_CurUser,1,m_UserDlg.m_UserName);
ctl->SetItemText(m_CurUser,2,m_UserDlg.m_UserPwd);
ctl->SetItemText(m_CurUser,3,m_UserDlg.m_UserAble);
ctl->SetItemText(m_CurUser,5,m_UserDlg.m_UserDep);
ctl->SetItemText(m_CurUser,6,m_UserDlg.m_UserAddr);
ctl->SetItemText(m_CurUser,4,m_UserDlg.m_UserSex);
ctl->SetItemText(m_CurUser,7,m_UserDlg.m_UserTitle);
ctl->SetItemText(m_CurUser,8,m_UserDlg.m_UserEmail);
ctl->SetItemText(m_CurUser,9,m_UserDlg.m_UserPhone);
ctl->SetItemText(m_CurUser,10,m_UserDlg.m_UserInfo);}
m_UserRecordSet.m_strFilter.Format("UserID='%' order by UserID",m_CurUserID);
这个format写错了,"UserID='%'没标明数据类型
m_UserDlg.m_UserName=chrTemp;
ctl->GetItemText(m_CurUser,2,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserPwd=chrTemp;
每次GetItemText的时候先清空,避免无效数据。
ctl->GetItemText(m_CurUser,1,chrTemp,sizeof(char[20]));
m_UserDlg.m_UserName=chrTemp;
ctl->GetItemText(m_CurUser,2,chrTemp,sizeof(char[20]));
memset(chTemp, 0, 21);sizeof(char〔50〕),比chrTemp还大,会造成溢出,很容易crash, chrTemp需要大一些,要大于你需要得到字符串长度。