是这样的,我在用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);
望各位高手帮帮忙啊!!
刚注册,分不多,包涵~~

解决方案 »

  1.   

    A-->B-->S-->L问题应该出在S-->L这里,当你取得记录时去弹出L对话框,这个弹出的代码是怎么实现的?估计是这里出问题了,所以在关闭L时没什么问题但当关闭L的父窗体时就可能出错。这类错误多为指针问题。把你是怎样生成L对话框的代码贴出来看看吧!
      

  2.   

    崩溃的时候,查看一下编译器中call stack等,看到底什么语句出问题了
      

  3.   

    Load模态对话框的显示和成员变量的调用有问题吧
    你应该先判断能不能取到纪录,然后再显示Load对话框,并显示纪录。
      

  4.   


    这个地方,生成L对话框的代码是直接用Load.DoModal()生成的 
      

  5.   


    这个判断过了,如果取不到是不会有任何问题的,但是取到了记录的话,在Load对话框也能正确显示记录的信息,但是在返回S对话框后,再点击退出的按钮就会有以上的问题了,所以问题应该是出现在弹出Load对话框之后的~~
      

  6.   


    能举例具体说明怎么操作吗?小弟刚学习MFC,不是很懂
      

  7.   

    方便的话给程序我看看![email protected]