用事务功能一次性insert到harm表50条数据,其中
时间和数组的index为联合主键,如 09:20:45 和1,09:20:45 和2,……09:20:45 和50,
执行错误时用
对话框弹出sql语句字符串
db.transaction ();//db是一个已定义的QDatabase对象
QSqlQuery query;
QString sql_harm = QString("insert into harm values('" + now.toString(Qt::LocaleDate) + "',");
/* 已定义的QDateTime 对象,now.currentDateTime ();*/ for(int s = 0; s < 50; s++)
{
QString sql = QString("%1, %2, %3)");
sql =sql.arg(s + 1);
sql =sql.arg(*(arry_U+s)); //arry_U arry_I是50维数组
sql =sql.arg(*(arry_I+s));
sql =sql_harm + sql;
if(!query.exec(sql)) {
QMessageBox msgBox;
msgBox.setDetailedText (sql) ;
msgBox.exec();
}
}
db.commit();
令人糊涂的是,注意红色语句,无论
if(!query.exec(sql)还是
if(query.exec(sql),都会弹出对话框。
更纳闷的是,if(!query.exec(sql)会弹出50个对话框,好似50个添加都错误,但我用显示的时间来select时,如:
QString mm("select * from harm where datetime = '2008-12-1 9:48:29'");
query.exec(mm);
while(query.next())
ii++; 结果i = 50,证明添加是完全成功。
反过来用if(query.exec(sql) ,还是有对话框弹出,而且还不止50个,反复出现,远大于50。估计应该是会出现50次重复出现,供2500个。好像是添加错误,自动重新执行了。
再select得到记录为 0条有两点糊涂: 1,同样的数据,怎
么if(!query.exec(sql)和if(query.exec(sql)都有对话框弹出??[/color]而且返回false的,添加数据是正常的,ture反而是失败的???
2,用if(query.exec(sql)时,对话框远远>50个,QSqlQuery 好像自动rollback了(绝对没有人为写rollback或重复执行的代码),重复执行了,糊涂!!
望得到帮助和提示,先谢谢![ 此贴被xiaochunz在2008-12-01 21:09重新编辑 ]