delphi FireDAC使用ApplyUpdates批量提交数据

简单的设计一下界面,大致如下:

要求:审核或者反审核用户选择的数据  

  1.正常点审核时,审核=true,审核人=当前用户名

  2.反审核时,审核=false,审核人=null

 实现代码:

 

procedure TForm1.UpdateData(flg: Boolean);
var
  i, n, Errors: Integer;
  PN, ID: string;
begin
  if flg then
    PN := 'TEST'     //用户名,按业务自己处理
  else
    PN := 'NULL';    //反审核,按业务自己处理

  with FDQuery1 do
  begin
    FetchOptions.AutoClose := False;  //取消自动关闭
    CachedUpdates := True;            //开户快储功能
    n := TV.datacontroller.GetSelectedCount;     //当前选择记录的长度
{*
  我不知道你们有没有出现过这种问题,当我ctrl+a全选数据时,就会弹错,原因是此时recno指到了最后一条记录
  导致下面的 TV.Controller.SelectedRows[i].Focuesd:=true; 语句出错,所以我下面做了个判断,当选择了所有的记录时,手动把游标移动到了第一条
*}
  if n=RecordCount then  
   frist; try for i := 0 to n - 1 do begin
     TV.Controller.SelectedRows[i].Focuesd:=true; Edit; FieldByName(
'审核').Value := BoolToStr(flg);//按业务自己处理 FieldByName('审核人').Value := PN;//按业务自己处理 Next; end; FDConnection1.StartTransaction; //开始事务 Errors := ApplyUpdates(0); //尝试批量更新,并返回错误值 finally if Errors > 0 then FDConnection1.Rollback //出错回滚 else begin FDConnection1.Commit;   CommitUpdates; // 清除所有异动记录 Refresh; //更新数据 end; CachedUpdates := False; //关闭快储 end; end; end;
 Errors := ApplyUpdates(0);
参数为0时,表示不容忍任何错误,直接回滚
参数为-1时,表示尽量保存修改,更新完后再报错误.
比如你要更新十条数据,其中有五条会成功,五条会失败,此时如果你参数为0的话,程序就会直接放弃所有变更,也就是不更新了.如果参数为-1,则会更新五条,然后再告诉你有五条出错了

我用SQL语句一句句的更新,同样53条数据的时间对比如下,也不知道是不是我的数据量太少,没有体现出ApplyUpdates的性能,还是什么原因.服务器的负荷是减少了,但花费的时间变多了

 

 说一下多选数据时的问题:

 

然后ACXTV.Controller.SelectedRows[i].index这个属性,在使用时也要注意一下,这个值不一定会等于RecNo的值,所以我们不能用它来设置游标位置.

 

 

 

 

 2023-02-18

以下是ChatGPT的回复

---
Q: 请用delphi写出用tfdquery组件实现批量更新的代码,要带注释
A:
//定义变量
var
  FDQuery1: TFDQuery;
  i: Integer;

//初始化
FDQuery1 := TFDQuery.Create(nil);

//设置SQL语句
FDQuery1.SQL.Text := 'update table set field1=:field1,field2=:field2 where id=:id';

//循环更新
for i := 0 to 10 do
begin
  FDQuery1.ParamByName('field1').AsString := 'value1';
  FDQuery1.ParamByName('field2').AsString := 'value2';
  FDQuery1.ParamByName('id').AsInteger := i;
  FDQuery1.ExecSQL;
end;

//释放资源
FDQuery1.Free;---

 

 




posted @ 2023-02-10 10:03  一曲轻扬  阅读(690)  评论(0编辑  收藏  举报