是这样的,我在用ODBC API访问SQL数据库
主对话框A,点击按键确定后进入模态对话框B,在B对话框中点击一个子菜单后用Search.DoModal()进入模态对话框Search,在Search对话框下输入变量查询值C后用SQL语句取得表记录,若取得记录则进入模态对话框Load显示表信息内容,取不到则停留在Search对话框继续查询或者退出返回到B对话框。
问题在于,取不到记录的话,什么问题都没有,若是取到记录的话,则进入Load对话框后点击确定关闭Load返回Search对话框后,要关闭Search对话框就发生崩溃了,具体信息为
Debug Error!
Program:...\manage.exe
DAMAGE:after Normal block(#99)at 0x00512970.
(Press Retry to debug the application)
以下是执行以上主要操作的代码,Search中点击后查询的按键函数为:
void Search::OnSearch1()
{
UpdateData();
// TODO: Add your control notification handler code here
LoadInfo Load;
Load.m_Loadid=m_conditionL;
SQLINTEGER lenOut1,lenOut2,lenOut3;
SQLHSTMT stmt;
CString sqlquery="select * from Barn where LoadID='"+m_conditionL+"' ";
SQLAllocStmt(conn,&stmt);
CString name;
SQLExecDirect(stmt,(SQLCHAR*)(LPCTSTR)sqlquery,SQL_NTS);
SQLBindCol(stmt,1,SQL_C_CHAR,(SQLCHAR*)(LPCTSTR)Load.m_Loadid,1000,&lenOut1);
SQLBindCol(stmt,2,SQL_C_CHAR,(SQLCHAR*)(LPCTSTR)Load.m_Loadname,1000,&lenOut2);
SQLBindCol(stmt,3,SQL_C_ULONG,&Load.m_Loadleave,2000,&lenOut3);
while(SQLFetch(stmt)==SQL_SUCCESS)
{
AfxMessageBox("good!");
}
if(Load.m_Loadleave==NULL)
{
AfxMessageBox("查无此记录!");return ;
}
Load.DoModal();
}
而取消按键函数代码中只有一个CDialog::EndDialog(0);
在Load中,只有确定按键,确定按键函数代码也只有CDialog::EndDialog(0);
望各位高手帮帮忙啊!!
刚注册,分不多,包涵~~
主对话框A,点击按键确定后进入模态对话框B,在B对话框中点击一个子菜单后用Search.DoModal()进入模态对话框Search,在Search对话框下输入变量查询值C后用SQL语句取得表记录,若取得记录则进入模态对话框Load显示表信息内容,取不到则停留在Search对话框继续查询或者退出返回到B对话框。
问题在于,取不到记录的话,什么问题都没有,若是取到记录的话,则进入Load对话框后点击确定关闭Load返回Search对话框后,要关闭Search对话框就发生崩溃了,具体信息为
Debug Error!
Program:...\manage.exe
DAMAGE:after Normal block(#99)at 0x00512970.
(Press Retry to debug the application)
以下是执行以上主要操作的代码,Search中点击后查询的按键函数为:
void Search::OnSearch1()
{
UpdateData();
// TODO: Add your control notification handler code here
LoadInfo Load;
Load.m_Loadid=m_conditionL;
SQLINTEGER lenOut1,lenOut2,lenOut3;
SQLHSTMT stmt;
CString sqlquery="select * from Barn where LoadID='"+m_conditionL+"' ";
SQLAllocStmt(conn,&stmt);
CString name;
SQLExecDirect(stmt,(SQLCHAR*)(LPCTSTR)sqlquery,SQL_NTS);
SQLBindCol(stmt,1,SQL_C_CHAR,(SQLCHAR*)(LPCTSTR)Load.m_Loadid,1000,&lenOut1);
SQLBindCol(stmt,2,SQL_C_CHAR,(SQLCHAR*)(LPCTSTR)Load.m_Loadname,1000,&lenOut2);
SQLBindCol(stmt,3,SQL_C_ULONG,&Load.m_Loadleave,2000,&lenOut3);
while(SQLFetch(stmt)==SQL_SUCCESS)
{
AfxMessageBox("good!");
}
if(Load.m_Loadleave==NULL)
{
AfxMessageBox("查无此记录!");return ;
}
Load.DoModal();
}
而取消按键函数代码中只有一个CDialog::EndDialog(0);
在Load中,只有确定按键,确定按键函数代码也只有CDialog::EndDialog(0);
望各位高手帮帮忙啊!!
刚注册,分不多,包涵~~
你应该先判断能不能取到纪录,然后再显示Load对话框,并显示纪录。
这个地方,生成L对话框的代码是直接用Load.DoModal()生成的
这个判断过了,如果取不到是不会有任何问题的,但是取到了记录的话,在Load对话框也能正确显示记录的信息,但是在返回S对话框后,再点击退出的按钮就会有以上的问题了,所以问题应该是出现在弹出Load对话框之后的~~
能举例具体说明怎么操作吗?小弟刚学习MFC,不是很懂