随笔 - 2146  文章 - 19 评论 - 11846 阅读 - 1267万


可把下面代码直接贴在空白窗体上, 以快速完成窗体设计:


代码:
{建立}
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 指令.

posted on   万一  阅读(8351)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2010-05-28 jQuery 练习[二]: 获取对象(3) - 根据属性、内容匹配, 还有表单元素匹配
2010-05-28 jQuery 练习[二]: 获取对象(2) - 定位子对象
2009-05-28 学习 SQL 语句 - Insert、Update、Delete
2009-05-28 学习 SQL 语句 - Select(9): 其他
2009-05-28 学习 SQL 语句 - Select(8): 分组条件
2009-05-28 学习 SQL 语句 - Select(7): 分组统计之 Avg()、Sum()、Max()、Min()、Count()
2009-05-28 学习 SQL 语句 - Select(6): 字段运算


点击右上角即可分享
微信分享提示