我用如下的语句的往SQL中的数据库添加数据:
strSQL.Format("insert into PERSONNEL (PER_GH,PER_NAME,PER_SEX,PER_XL,PER_HOMETOWN,PER_MARRIAGE,PER_NATION,PER_ID,PER_ZZMM,PER_OLDADD,PER_NEWADD,PER_YB,PER_OLDTEL,PER_NEWTEL,PER_INDATA,PER_BEINSKILL,PER_HTQ,PER_QUARTER,PER_REMARK,JOB_ID,DEPT_ID)  
values(%d,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%d-%d-%d','%s','%s','%s','%s','%d','%d')" ,
i,m_ygxm,m_sex,m_xl,m_ygjg,m_yghy,m_ygmz,m_ygsfz,m_ygzz,m_ygyzd,m_ygxzd,m_ygyyb,m_ygydh,m_ygxdh,m_time.GetYear(),m_time.GetMonth(),m_time.GetDay(),m_ygjn,m_yghtq,m_ygzs,m_ygbz,m_yggw,m_ygbm);
 m_database.ExecuteSQL (strSQL) ;
插入完后就弹出一个出错框:Debug Assertion Failed!下面还有3个按钮,选忽略按钮可以往数据库中添加记录,但要重新显示输入的记录时又会弹出这个对话框,在SQL中用这个INSERT语句可以顺利插入,也可以顺利显示,不知道为什么老是出来这个对话框?希望得到大家热心的帮助啊

解决方案 »

  1.   

    对了,还有每次插入完成后要显示都调用RefreshData()函数,该函数如下:
    if(!m_database.IsOpen()){
    m_database.Open(_T("rs"));
    }
       m_yggl.DeleteAllItems();
       CPsnSet m_recordset(&m_database);
       m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,m_cxzf);
        CDBVariant varValue;
       if(m_recordset.GetRecordCount()!=0) m_recordset.MoveFirst();
       char buf[200];
       int i=0;
       while(!m_recordset.IsEOF())
    {
             int temp=0;
             m_recordset.GetFieldValue(temp,varValue);
             sprintf(buf,"%d",varValue.m_iVal);m_yggl.InsertItem(i,buf);
                      m_recordset.GetFieldValue(2,varValue);
                      m_yggl.SetItemText(i,5,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(3,varValue);
    m_yggl.SetItemText(i,6,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(4,varValue);
    m_yggl.SetItemText(i,4,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(5,varValue);

    m_yggl.SetItemText(i,7,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(6,varValue);
    m_yggl.SetItemText(i,8,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(7,varValue);

             m_yggl.SetItemText(i,15,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(8,varValue);
    m_yggl.SetItemText(i,9,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(9,varValue);
    m_yggl.SetItemText(i,10,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(10,varValue);
    m_yggl.SetItemText(i,11,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(11,varValue);

    m_yggl.SetItemText(i,12,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(12,varValue);

    m_yggl.SetItemText(i,13,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(13,varValue);
    m_yggl.SetItemText(i,14,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(14,varValue);
    sprintf(buf,"%d-%d-%d",varValue.m_pdate->year,varValue.m_pdate->month,varValue.m_pdate->day); m_yggl.SetItemText(i,16,buf);
                     m_recordset.GetFieldValue(15,varValue);
    m_yggl.SetItemText(i,17,varValue.m_pstring->GetBuffer(1));
              m_recordset.GetFieldValue(16,varValue);

    m_yggl.SetItemText(i,18,varValue.m_pstring->GetBuffer(1));
             m_recordset.GetFieldValue(17,varValue);

    m_yggl.SetItemText(i,19,varValue.m_pstring->GetBuffer(1));
    m_recordset.GetFieldValue(18,varValue);
    m_yggl.SetItemText(i,20,varValue.m_pstring->GetBuffer(1));
                      m_recordset.GetFieldValue(19,varValue);
                      sprintf(buf,"%d",varValue.m_iVal);m_yggl.SetItemText(i,3,buf);
    m_recordset.GetFieldValue(20,varValue);
                      sprintf(buf,"%d",varValue.m_iVal);m_yggl.SetItemText(i,2,buf);  
    m_recordset.MoveNext();
    i++; 
    }  
    }
    程序可以顺利通过编译,就是添加完和显示的时候出现Debug Assertion Failed!的出错对话框,我的列表显示顺序和数据库中字段顺序是不一一对映的,不知道是什么原因?在线等待你的热心帮助~~~~~~!!!!!!!!!!!!!!
      

  2.   

    pomelowu(羽战士) 你的方法刚才刚试问题还是一样存在
      

  3.   

    fjfzb() 我调试过了,当F5按到RefreshData()函数的m_recordset.MoveNext();语句时那个对话框就出来了,还有在插入语句的循环体内有一个避免重复插入的语句
               strSQL.Format("select * from PERSONNEL where PER_GH=%d",i);
      m_yginforecordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
    F5按到第一个语句的时候也有那个对话框出来
      

  4.   

    看来你的问题不是在那个插入语句而是在那个查询和那个 movenext
    movenext
    的话,出错,有可能是因为,你的记录集没有打开,或者打开了,是空的,或者已经是eof了,但是还要 movenextm_yginforecordset->Open
    至于这个出错,有可能是你这个m_yginforecordset先前已经打开了,但是你再次打开,之前没有关闭,因为看样子,你这个查询的sql语句也是没什么问题
      

  5.   

    我把每一句全调试了,结果还是那两句出现问题,我在写代码的同时进行过数据库表的修改,请问这会有影响吗?handsomerun(毛毛)在movenext前我已经movefirst了,m_yginforecordset->Open前我也先close了,不过调试还是那两个出问题,是不是写代码的时候修改数据库表造成的?如果不是我把全部相关代码贴出来啊,非常感谢大家的帮助
      

  6.   

    恩,是在程序外修改的,我刚开始VC,那我在从建一个一样的工程,不动数据库了,我刚开始VC,有点慢,明天在给你看情况,谢谢啊
      

  7.   

    不用客气,初学数据库http://www.vckbase.com/document/viewdoc/?id=215这个文章不错我刚开始做数据库的时候,就是看这个文章的,呵呵
      

  8.   

    看看诊断信息是哪个文件的哪行,依次向上找,试试
    也许代码不全,但在全部删除后没有看到InsertItem,
      

  9.   

    次对话框中添加完成后的确认代码如下:
    void CYGINFO::OnButtonYgqr() 
    {
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    CString strSQL;
    int i =1;
    int flag =0;
    while(!flag){
             CPsnSet *m_yginforecordset= new CPsnSet(&m_database);
    strSQL.Format("select * from PERSONNEL where PER_GH=%d",i);/*避免重复插入
    m_yginforecordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
     if (m_yginforecordset->GetRecordCount()==0) {
     strSQL.Format("insert into PERSONNEL  values(%d,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\','%d-%d-%d',\'%s\',\'%s\',\'%s\',\'%s\',%d,%d)" ,i,m_ygxm,m_sex,m_xl,m_ygjg,m_yghy,m_ygmz,m_ygsfz,m_ygzz,m_ygyzd,m_ygxzd,m_ygyyb,m_ygydh,m_ygxdh,m_time.GetYear(),m_time.GetMonth(),m_time.GetDay(),m_ygjn,m_yghtq,m_ygzs,m_ygbz,m_yggw,m_ygbm);
             m_database.ExecuteSQL (strSQL) ;
     flag=1;
     }
      i++;
    }
    }
    程序可以顺利通过编译
      

  10.   

    仔细想了想,可以顺利往数据库中写记录
    调试显示的是:1。在列表中显示数据库内容时,当MoveNext到用程序插入的记录时,
                     Debug Assertion Failed!的出错对话框就弹出来,
                  2。在插入记录时,为了避免主键的重复,用: 
                     strSQL.Format("select * from PERSONNEL where PER_GH=%d",i);
                     m_yginforecordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
                     if (m_yginforecordset->GetRecordCount()==0)
                     当用OPEN函数打开用程序插入的记录的时,
                     Debug Assertion Failed!的出错对话框就弹出来!
    现在问题好象在插入的记录上面,SQL中有坏记录这一说吗?(^_^),猜测啊,初学者等带你热心的帮助!!!~
      

  11.   

    。在列表中显示数据库内容时,当MoveNext到用程序插入的记录时,
                     Debug Assertion Failed!的出错对话框就弹出来,
    你是先插入还是在用recordset查询的??
    如果是先查询的
    那么你用insert插入以后,新增的记录是不会添加到recordset里去的,要先插入再查询的
    问题2应是不会有坏记录这么一说的,没听说过啊,呵呵
    你打开数据库,看看新增的和原有的有什么区别,
      

  12.   

    具体问题也没有看清楚,但有一点,你对数据库操作时把把代码段放在try-catch块中,这样一来,如果是对数据库操作有问题了,可以很清楚的弄明白是哪有问题
    try
    {
         pdb->executeSQL();
         prc->MoveNext(); //等等会抛出异常的操作都放在try里
    }
    catch (CDBException *e)
    {
         e->ReportError();
         e->Delete();
    }祝你好运
      

  13.   

    在""中的'可以不加\的
    看起来好象是因为你的字段错位了
    比如values()里的值个数不够,或者多了,或者类型不正确
      

  14.   

    感谢大家的帮忙啊,我把它编译成release 版本了,可以正常运行了,不知道是程序问题还是什么问题,弄了3天,哎!~~~~~~~~~~再次谢谢各位