FireDAC 下的 Sqlite [11] - 关于批量提交 SQL 命令的测试

可把下面代码直接贴在空白窗体上, 以快速完成窗体设计:
object DBGrid1: TDBGrid
Left = 0
Top = 0
Width = 265
Height = 338
Align = alLeft
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = ‘Tahoma‘
TitleFont.Style = []
end
object Button1: TButton
Left = 280
Top = 24
Width = 75
Height = 25
Caption = ‘Button1‘
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 280
Top = 64
Width = 75
Height = 25
Caption = ‘Button2‘
TabOrder = 2
OnClick = Button2Click
end
object Button3: TButton
Left = 280
Top = 104
Width = 75
Height = 25
Caption = ‘Button3‘
TabOrder = 3
OnClick = Button3Click
end
object Button4: TButton
Left = 280
Top = 144
Width = 75
Height = 25
Caption = ‘Button4‘
TabOrder = 4
OnClick = Button4Click
end
object FDConnection1: TFDConnection
Left = 66
Top = 48
end
object FDPhysSQLiteDriverLink1: TFDPhysSQLiteDriverLink
Left = 167
Top = 48
end
object FDGUIxWaitCursor1: TFDGUIxWaitCursor
Provider = ‘Forms‘
Left = 164
Top = 120
end
object FDQuery1: TFDQuery
Connection = FDConnection1
Left = 56
Top = 192
end
object DataSource1: TDataSource
DataSet = FDQuery1
Left = 60
Top = 120
end




代码:


{建立}
procedure TForm1.FormCreate(Sender: TObject);
const
  strTable = ‘CREATE TABLE MyTable(Id integer PRIMARY KEY AUTOINCREMENT, Name string(10), Age integer)‘; //Id(自增), Name, Age
begin
  FDConnection1.DriverName := ‘SQLite‘;
  FDQuery1.ExecSQL(strTable);
  FDQuery1.Open(‘SELECT * FROM MyTable‘);
end;

{逐条插入}
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 指令.



FireDAC
下的 Sqlite [11] - 关于批量提交 SQL 命令的测试,布布扣,bubuko.com

FireDAC
下的 Sqlite [11] - 关于批量提交 SQL 命令的测试

时间: 2025-01-04 23:02:39

FireDAC 下的 Sqlite [11] - 关于批量提交 SQL 命令的测试的相关文章

FireDAC 下的 Sqlite [5] - 数据的插入、更新、删除

先在空白窗体上添加: TFDConnection.TFDPhysSQLiteDriverLink.TFDGUIxWaitCursor.TFDQuery.TDataSource.TDBGrid(并在设计时关联好).你也可以复制下面文本框中的内容, 然后直接往窗体上贴, 以快速完成以上的添加过程:object DBGrid1: TDBGrid Left = 16 Top = 88 Width = 361 Height = 329 DataSource = DataSource1 TabOrder =

FireDAC 下的 Sqlite [8] - 自定义函数

Sqlite 本身没有这个功能, FireDAC 通过 TFDSQLiteFunction 增加了该功能; 尽管通过某些 SQL 语句或通过视图也可以达到类似效果, 但函数会更灵活些.本例先建了一个成绩表, 然后通过两个 TFDSQLiteFunction 实现了 "总分" 与 "平均分" 的计算. 你可以复制下面文本框中的内容, 然后直接往窗体上贴, 以快速完成窗体设计:object DBGrid1: TDBGrid Left = 8 Top = 88 Width

FireDAC 下的 Sqlite [1] - 前言

很长时间没静下心来写博客了, 现在回来, 是 Delphi 不断地进步让我感动.振奋.Delphi XE5 并入了 FireDAC, 第一印象非常好, 恐怕 dbExpress 等等都要靠边站了.让我最高兴地是 FireDAC 对 Sqlite 的支持!优秀的 Sqlite 早就有很多 Delphi 的包装(http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers, 从 https://code.google.com/ 等还能搜到更多).有静态引用

FireDAC 下的 Sqlite [10] - 使用 R-Tree 搜索.

R-Tree 主要用于三维空间的搜索, 据说这种搜索算法非常之快, 哪怕百万条记录也是眨眼间的事! SQLite 支持 1-5 维, FireDAC 也提供了 TFDSQLiteRTree 控件以方便定义回调函数. 为了简单, 我用二维表进行了成功的测试. 建立 R-Tree 表(索引)时需要使用特定语法, 譬如: FDConnection1.ExecSQL('CREATE VIRTUAL TABLE MyRTreeTable USING rtree(Id, minX, maxX, minY,

FireDAC 下的 Sqlite [7] - 备份、优化、事务(Transaction)/

用 TFDSQLiteBackup 控件, 两三行代码即可完成 Sqlite 数据库的备份. procedure TForm1.Button1Click(Sender: TObject); begin   {先初始化目标}   FDConnection1.DriverName := 'SQLite';   FDConnection1.Params.Add('Database=C:\Temp\FDDemo_Back.sdb'); //如果不指定这个路径, 就是备份到内存   FDConnectio

FireDAC 下的 Sqlite [3] - 获取数据库的基本信息

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

FireDAC 下的 Sqlite [9] - 关于排序

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. http://www.qidian

FireDAC 下的 Sqlite [12] - 备忘录(草草结束这个话题了).

该话题的继续延伸主要就是 SQL 的语法了, 草草收场的原因是现在的脑筋已经进入了 IntraWeb 的世界. 相关备忘会随时补充在下面: //连接多个数据库的参考代码: FDConnection1.ExecSQL('ATTACH ''c:\hr.sdb'' AS hr'); FDConnection1.ExecSQL('ATTACH ''c:\cust.sdb'' AS cust'); FDQuery1.Open('select * from "Orders" o ' +   'le

FireDAC中的SQLite(一)

Windows client software,FireDAC supports two SQLite library linking modes: Static linking: the x86 sqlite3_x86.obj or x64 sqlite3_x64.obj client library is statically linked into application. FireDAC provides sqlite3_Xxx.obj v 3.7.15. That is default