导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2003/8/14 10:25:05
标题:
加入我的收藏
楼主:
以下代码执行过程没有出错,奇怪的是基本数据表有4条记录,导入(新数据插入)到业务数据表却只有三条,最后一条就是不处理,更奇怪的是msg:=format('数据导入数据库完毕!插入数据%d条,更新数据%d条',[insertcount,updatecount]);语句却提示插入四条记录。 各位高手请指点帮忙帮忙!!! procedure Tf_jbsj_dksj.BitBtn2Click(Sender: TObject); var sflx,msg:string; num,i,j,count,insertcount,updatecount:integer; errflag,ok:boolean; JE:array[0..4]of double; XMBM:array[0..3] of string; SeekValue:string; begin errflag:=False; insertcount:=0; updatecount:=0; ShowMessage(format('开始把基本数据表导入到业务数据表(旧数据将被更新)',[])); self.Cursor:=crHourGlass; DataModule1.table1.Open; DataModule1.table1.Active := True; DataModule1.table1.First; errflag:=false; if DataModule1.DataBase1.InTransaction=true then DataModule1.DataBase1.RollBack; try DataModule1.Database1.StartTransaction; except MessageDlg('StartTransaction Error.ljh', mtError,[mbYes], 0); abort; end; DataModule1.T_jbsjrl.First; while not DataModule1.T_jbsjrl.Eof do begin DataModule1.Table1.First; if DataModule1.T_jbsjrl.Fields[6].AsString = '0' then begin DataModule1.T_jbsjrl.Next; continue; end; sflx:=DataModule1.T_jbsjrl.Fields[7].AsString; GetSFXXB(sflx,XMBM,JE,ok);//取某值用用,不管 SeekValue:=DataModule1.T_jbsjrl.Fields[0].AsString; DataModule1.Table1.IndexFieldNames :='pk_sfdm'; if DataModule1.Table1.findkey([SeekValue]) then//如果找到,修改没有插入 begin DataModule1.Table1.edit; try DataModule1.Table1.FieldByName('pk_sfdm').Value:=DataModule1.T_jbsjrl.Fields[0].Value; DataModule1.Table1.Fields[1].Value:=DataModule1.T_jbsjrl.Fields[1].Value; DataModule1.Table1.Fields[2].Value:=DataModule1.T_jbsjrl.Fields[0].Value; DataModule1.Table1.Fields[3].Value:=DataModule1.T_jbsjrl.Fields[1].Value; DataModule1.Table1.Fields[4].Value:=DataModule1.T_jbsjrl.Fields[5].Value; DataModule1.Table1.Fields[5].Value:=DataModule1.T_jbsjrl.Fields[4].Value; DataModule1.Table1.Fields[6].Value:=JE[0]; DataModule1.Table1.Fields[7].Value:=XMBM[0]; DataModule1.Table1.Fields[8].Value:=JE[1]; DataModule1.Table1.Fields[9].Value:= XMBM[1]; DataModule1.Table1.Fields[10].Value:=JE[2]; DataModule1.Table1.Fields[11].Value:=XMBM[2]; DataModule1.Table1.Fields[12].Value:=JE[3]; DataModule1.Table1.Fields[13].Value:=XMBM[3]; DataModule1.Table1.Fields[14].Value:= JE[4]; DataModule1.Table1.FieldByName('pk_zlzt').AsString:='0'; DataModule1.Table1.FieldByName('pk_dkzt').AsString:='0'; DataModule1.T_jbsjrl.Next; updatecount:=updatecount+1;//修改统计数 except errflag:=true; MessageDlg('数据导入数据库失败,退出!!', mtError,[mbYes], 0); break; end; end else begin DataModule1.Table1.insert; try //showmessage('insert'+DataModule1.T_jbsjrl.Fields[0].Value); DataModule1.Table1.FieldByName('pk_sfdm').Value:=DataModule1.T_jbsjrl.Fields[0].Value; DataModule1.Table1.Fields[1].Value:=DataModule1.T_jbsjrl.Fields[1].Value; DataModule1.Table1.Fields[2].Value:=DataModule1.T_jbsjrl.Fields[0].Value; DataModule1.Table1.Fields[3].Value:=DataModule1.T_jbsjrl.Fields[1].Value; DataModule1.Table1.Fields[4].Value:=DataModule1.T_jbsjrl.Fields[5].Value; DataModule1.Table1.Fields[5].Value:=DataModule1.T_jbsjrl.Fields[4].Value; DataModule1.Table1.Fields[6].Value:=JE[0]; DataModule1.Table1.Fields[7].Value:=XMBM[0]; DataModule1.Table1.Fields[8].Value:=JE[1]; DataModule1.Table1.Fields[9].Value:= XMBM[1]; DataModule1.Table1.Fields[10].Value:=JE[2]; DataModule1.Table1.Fields[11].Value:=XMBM[2]; DataModule1.Table1.Fields[12].Value:=JE[3]; DataModule1.Table1.Fields[13].Value:=XMBM[3]; DataModule1.Table1.Fields[14].Value:= JE[4]; DataModule1.Table1.FieldByName('pk_zlzt').AsString:='0'; DataModule1.Table1.FieldByName('pk_dkzt').AsString:='0'; DataModule1.T_jbsjrl.Next; insertcount:=insertcount+1;//插入统计数 except errflag:=true; MessageDlg('数据导入数据库失败,退出!!', mtError,[mbYes], 0); break; end; end; end; if errflag=false then try DataModule1.Database1.commit; except MessageDlg('commit Error.', mtError,[mbYes], 0); abort; end else DataModule1.Database1.rollback; beep; DataModule1.Table1.Close; DataModule1.Table1.Open; msg:=format('数据导入数据库完毕!插入数据%d条,更新数据%d条',[insertcount,updatecount]); MessageDlg(msg, mtConfirmation,[mbYes], 0); self.Cursor:=crDefault; end;
----------------------------------------------
-
作者:
hedong (hedong)
★☆☆☆☆
-
盒子活跃会员
2003/8/14 10:43:34
1楼:
把 DataModule1.T_jbsjrl.Next; 改为 DataModule1.T_jbsjrl.Post;
----------------------------------------------
-
作者:
2003/8/14 11:26:32
2楼:
哦,我使用的是事务处理,post会影响到事务处理吗?如果出现记录异常,rollback时,会把post的记录rollback吗?我对post,next等概念不是很理解
----------------------------------------------
-
作者:
hedong (hedong)
★☆☆☆☆
-
盒子活跃会员
2003/8/14 12:03:04
3楼:
post是提交数据 next是记录移动到下一条, 之所以最后一条不能提交是应为当next下一条记录时,如果dataset的state属性 为dsInset或dsEdit时,自动提交上一条记录。 因此当最后一条再无法next,所以不能提交,造成当前记录不能保存。你用next 将造成最后一条记录永远不能保存的数据库,不管数据是4条还是400条。 所以将next改为post就可以了。 post不会影响事务处理,你可以测试一下嘛。
----------------------------------------------
-
作者:
z1ht (戴尔)
★☆☆☆☆
-
普通会员
2003/8/14 13:14:24
4楼:
把 DataModule1.T_jbsjrl.Next; 改为 DataModule1.T_jbsjrl.First;
----------------------------------------------
-