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 命令的测试的更多相关文章
- FireDAC 下的 Sqlite [4] - 创建数据库
建立数据库的代码: {建立内存数据库的一般代码:} begin FDConnection1.DriverName := 'SQLite'; //同 FDConnection1.Params.Add(' ...
- php中bindValue的批量提交sql语句
php预编译sql语句,可以批量提交sql,也可以实现防注入 <?php $dsn='mysql:host=127.0.0.1;port=3306;dbname=bisai'; $usernam ...
- FireDAC 下的 Sqlite [3] - 获取数据库的基本信息
在空白窗体上添加: TFDConnection, TFDPhysSQLiteDriverLink, TFDGUIxWaitCursor, TMemo procedure TForm1.FormCrea ...
- FireDAC 下的 Sqlite [6] - 加密
主要就是设置 TFDConnection 的两个链接参数: Password, NewPassword, 非常简单. const dbPath = 'C:\Temp\SQLiteTest.sdb'; ...
- Windows下使用cmd启动Oracle EM和sql命令使用+主机身份认证
(1)cmd命令下使用sql命令 >sqlplus / as sysdba sql>select * from v$version; (2)cmd命令下启动Oracle EM 安装完ora ...
- FireDAC 下的 Sqlite [9] - 关于排序
SQLite 内部是按二进制排序, 可以支持 ANSI; FrieDAC 通过 TFDSQLiteCollation 支持了 Unicode 排序, 并可通过其 OnCompare 事件自定义排序. ...
- FireDAC 下的 Sqlite [10] - 使用 R-Tree 搜索
R-Tree 主要用于三维空间的搜索, 据说这种搜索算法非常之快, 哪怕百万条记录也是眨眼间的事! SQLite 支持 1-5 维, FireDAC 也提供了 TFDSQLiteRTree 控件以方便 ...
- FireDAC 下的 Sqlite [8] - 自定义函数
Sqlite 本身没有这个功能, FireDAC 通过 TFDSQLiteFunction 增加了该功能; 尽管通过某些 SQL 语句或通过视图也可以达到类似效果, 但函数会更灵活些. 本例先建了一个 ...
- FireDAC 下的 Sqlite [2] - 第一个例子
为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\ ...
随机推荐
- 20145234黄斐《Java程序设计》第八周
教材学习内容总结 第十四章-NIO与NIO2 NIO与IO的区别 NIO Channel继承框架 想要取得Channel的操作对象,可以使用Channels类,它定义了静态方法newChannel() ...
- 第11月第21天 php引用 codeigniter cakephp
1. class CI_Controller { private static $instance; /** * Constructor */ public function __construct( ...
- 【译】SQLskills SQL101:Trace Flags、ERRORLOG、Update Statistics
最近阅读SQLskills SQL101,将Erin Stellato部分稍作整理.仅提取自己感兴趣的知识点,详细内容请阅读原文. 一.Trace Flags推荐开启三个跟踪标记1118.3023.3 ...
- 深入浅出js事件
深入浅出js事件 一.事件流 事件冒泡和事件捕获分别由微软和网景公司提出,这两个概念是为了解决页面中事件流(事件发生顺序)的问题. <div id="outer"> & ...
- 数链剖分(Tree)
题目链接:https://cn.vjudge.net/contest/279350#problem/D 题目大意:操作,单点查询,区间取反,询问区间最大值. AC代码: #include<ios ...
- android MeasureSpec的三个测量模式
1.MeasureSpec含义 其实可以去看MeasureSpec的文档,里面对MeasureSpec的作用介绍得很清楚.MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureS ...
- python 获取二进制文件
import requests response = requests.get('https://www.baidu.com/aladdin/img/tools/ip.png')with open(' ...
- 【并行计算】用MPI进行分布式内存编程(一)
通过上一篇关于并行计算准备部分的介绍,我们知道MPI(Message-Passing-Interface 消息传递接口)实现并行是进程级别的,通过通信在进程之间进行消息传递.MPI并不是一种新的开发语 ...
- centos6.5环境Redis下载及编译安装
centos6.5环境Redis下载及编译安装 1:官方站点: http://redis.io/download 下载最新版或者最新stable版 2:解压源码并进入目录 tar -zxvf redi ...
- 刘昕鑫 C# 特性详解
C# 特性详解 特性(attribute)是被指定给某一声明的一则附加的声明性信息. 在C#中,有一个小的预定义特性集合.在学习如何建立我们自己的定制特性(custom attributes)之前,我 ...