我用如下的语句的往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语句可以顺利插入,也可以顺利显示,不知道为什么老是出来这个对话框?希望得到大家热心的帮助啊
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语句可以顺利插入,也可以顺利显示,不知道为什么老是出来这个对话框?希望得到大家热心的帮助啊
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!的出错对话框,我的列表显示顺序和数据库中字段顺序是不一一对映的,不知道是什么原因?在线等待你的热心帮助~~~~~~!!!!!!!!!!!!!!
strSQL.Format("select * from PERSONNEL where PER_GH=%d",i);
m_yginforecordset->Open(AFX_DB_USE_DEFAULT_TYPE,strSQL);
F5按到第一个语句的时候也有那个对话框出来
movenext
的话,出错,有可能是因为,你的记录集没有打开,或者打开了,是空的,或者已经是eof了,但是还要 movenextm_yginforecordset->Open
至于这个出错,有可能是你这个m_yginforecordset先前已经打开了,但是你再次打开,之前没有关闭,因为看样子,你这个查询的sql语句也是没什么问题
也许代码不全,但在全部删除后没有看到InsertItem,
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++;
}
}
程序可以顺利通过编译
调试显示的是: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中有坏记录这一说吗?(^_^),猜测啊,初学者等带你热心的帮助!!!~
Debug Assertion Failed!的出错对话框就弹出来,
你是先插入还是在用recordset查询的??
如果是先查询的
那么你用insert插入以后,新增的记录是不会添加到recordset里去的,要先插入再查询的
问题2应是不会有坏记录这么一说的,没听说过啊,呵呵
你打开数据库,看看新增的和原有的有什么区别,
try
{
pdb->executeSQL();
prc->MoveNext(); //等等会抛出异常的操作都放在try里
}
catch (CDBException *e)
{
e->ReportError();
e->Delete();
}祝你好运
看起来好象是因为你的字段错位了
比如values()里的值个数不够,或者多了,或者类型不正确