DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: melqui
今日帖子: 5
在线用户: 8
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 nongdi (nongdi) ★☆☆☆☆ -
普通会员
2003/8/14 10:25:05
标题:
奇怪的问题? 浏览:2267
加入我的收藏
楼主: 以下代码执行过程没有出错,奇怪的是基本数据表有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;

----------------------------------------------
-
作者:
男 nongdi (nongdi) ★☆☆☆☆ -
普通会员
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;

----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行72.26563毫秒 RSS