码迷,mamicode.com
首页 > 数据库 > 详细

FireDAC 下的批量 SQL 命令执行

时间:2020-05-31 16:03:48      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:获取   www   cti   class   lse   end   start   button   脚本参数   

一、{逐条插入}
procedure TForm1.Button1Click(Sender: TObject);
const
  strInsert = INSERT INTO MyTable(Name, Age) VALUES(:name, :age);
begin
//  FDQuery1.FetchOptions.AutoClose := True; //默认值
  FDQuery1.ExecSQL(strInsert, [A, 1]);
  FDQuery1.ExecSQL(strInsert, [B, 2]);
  FDQuery1.ExecSQL(strInsert, [C, 3]);
  FDQuery1.ExecSQL(strInsert, [D, 4]);

  FDQuery1.Open(SELECT * FROM MyTable);
end;

 

二、{一次行插入}
procedure TForm1.Button2Click(Sender: TObject);
const
  strInsert = INSERT INTO MyTable(Name, Age) VALUES("%s", %d);
var
  LStr: string;
begin
  LStr := ‘‘;
  LStr := LStr + Format(strInsert, [AA, 11]) + ;;
  LStr := LStr + Format(strInsert, [BB, 22]) + ;;
  LStr := LStr + Format(strInsert, [CC, 33]) + ;;
  LStr := LStr + Format(strInsert, [DD, 44]) + ;;
  LStr := LStr + SELECT * FROM MyTable;

  FDQuery1.ExecSQL(LStr);
  FDQuery1.Open();
end;

三、{使用 NextRecordSet 方法提取并执行所有命令}
procedure TForm1.Button3Click(Sender: TObject);
const
  strInsert = INSERT INTO MyTable(Name, Age) VALUES("%s", %d);;
begin
  FDQuery1.FetchOptions.AutoClose := False; //按说这个是必须要设置的, 但测试时不设置也可以
  FDQuery1.SQL.Clear;
  FDQuery1.SQL.Add(Format(strInsert, [AAA, 111]));
  FDQuery1.SQL.Add(Format(strInsert, [BBB, 222]));
  FDQuery1.SQL.Add(Format(strInsert, [CCC, 333]));
  FDQuery1.SQL.Add(Format(strInsert, [DDD, 444]));

  FDQuery1.SQL.Add(SELECT * FROM MyTable);

  FDQuery1.Execute();
  FDQuery1.NextRecordSet;
end;

四、{使用 DML 数组参数}
procedure TForm1.Button4Click(Sender: TObject);
const
  strInsert = INSERT INTO MyTable(Name, Age) VALUES(:name, :age);;
begin
  FDQuery1.FetchOptions.AutoClose := False; //

  FDQuery1.SQL.Text := strInsert;
  FDQuery1.Params.ArraySize := 4; //准备把上面的语句执行 4 次

  {分别设置 4 次的参数}
  FDQuery1.Params[0].AsStrings[0] := AAAA;
  FDQuery1.Params[1].AsIntegers[0] := 1111;

  FDQuery1.Params[0].AsStrings[1] := BBBB;
  FDQuery1.Params[1].AsIntegers[1] := 2222;

  FDQuery1.Params[0].AsStrings[2] := CCCC;
  FDQuery1.Params[1].AsIntegers[2] := 3333;

  FDQuery1.Params[0].AsStrings[3] := DDDD;
  FDQuery1.Params[1].AsIntegers[3] := 4444;

  FDQuery1.Execute(4, 0); //从 1 条开始执行 4 次

  FDQuery1.SQL.Add(SELECT * FROM MyTable);
  FDQuery1.NextRecordSet;
end;

五、{使用 FireDAC 扩展的 SQL Script(TFDScript), 它还能直接调用文件中的 SQL 指令}

CREATE TABLE BOOKS(ID INTEGER PRIMARY KEY, NAME TEXT);
INSERT INTO BOOKS(ID, NAME) VALUES(1, Delphi 2009 handbook);
INSERT INTO BOOKS(ID, NAME) VALUES(2, Delphi XE2入門);
INSERT INTO BOOKS(ID, NAME) VALUES(3, Delph);
执行文件中描述的SQL

FDScript1.ExecuteFile(C:\data\sample.sql);
使用脚本参数
TFDScript的ExecuteFile方法将脚本参数作为第二个参数。
脚本参数是一个字符串数组。

FDScript1.ExecuteFile(文件名,脚本参数);
SQL语句中的“&职位编号”被替换为参数。

例子
C:\数据\ sample.sql

CREATE TABLE &1(ID INTEGER PRIMARY KEY, NAME TEXT);
INSERT INTO &1(ID, NAME) VALUES(1, &2);
INSERT INTO &1(ID, NAME) VALUES(2, &3);
INSERT INTO &1(ID, NAME) VALUES(3, &4);
执行文件中描述的SQL

FDScript1.ExecuteFile(C:\data\sample.sql,
  [ BOOKS,
    Delphi 2009 handbook―Delphi最新,
    Delphi XE2入門,
    Delphi]);
捕捉错误
如果执行SQL脚本时发生错误,则会引发OnError事件。

procedure TForm1.FDScript1Error(ASender: TObject;
  const AInitiator: IFDStanObject; var AException: Exception);
begin
 
  ShowMessage(AException.Message);
end;
获取发生的错误数
您可以获取TotalErrors属性中发生的错误数。

FDConnection1.StartTransaction;
try
  FDScript1.ExecuteFile(‘C:\data\sample.sql‘);
finally
  if FDScript1.TotalErrors > 0 then
    FDConnection1.Rollback
  else
    FDConnection1.Commit;
end;
显示SQL脚本执行的进度
使用TFDGUIxScriptDialog显示SQL脚本执行的进度。

TFDGUIxScriptDialog

将TFDGUIxScriptDialog组件放置在窗体上,并设置TFDScript组件的ScriptDialog属性。

FDScript1.ScriptDialog := FDGUIxScriptDialog1;

 



感谢参考 https://www.cnblogs.com/del/p/3758082.html

 

 
 
 

FireDAC 下的批量 SQL 命令执行

标签:获取   www   cti   class   lse   end   start   button   脚本参数   

原文地址:https://www.cnblogs.com/usegear/p/13018970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!