FireDAC 下的 Sqlite [5]:插入、更新、删除的配置骨架与验证
1. FireDAC 连上 Sqlite 之后增删改到底该怎么写才不翻车FireDAC 下的 Sqlite 插入、更新、删除是 Delphi 开发者把本地库真正用起来的第一道坎。连接能通、查询能出数据不代表写入就稳参数占位符写错、事务没提交、Refresh 时机不对、自增主键回填拿不到任何一个都能让你盯着 DBGrid 发呆。这篇就聚焦 FireDAC 连接 Sqlite 之后的增删改落地配置给你一套可复制的 FDConnection / FDQuery 参数骨架和 SQL 模板插入、更新、删除各演示一步验证动作保证数据变更可回滚、可复现。适合谁看已经能在 Delphi 里用 FireDAC 打开 Sqlite、会拖控件、但一写 INSERT/UPDATE/DELETE 就心里没底的同学。全文用最朴素的 VCL 窗体加按钮来跑不依赖第三方框架你照着敲就能复现。核心检索词就三个FireDAC、Sqlite、插入更新删除下面所有配置都围绕它们展开。我试过把参数化 SQL 和字符串拼接混着用结果遇到带单引号的姓名直接报语法错后来统一改成占位符才消停。所以本文的骨架一律走参数绑定不给你留拼接的坑。2. 前置准备TaoToken 与 FireDAC 环境各就各位2.1 FireDAC 侧要拖的控件在空白窗体上放这几个TFDConnection、TFDPhysSQLiteDriverLink、TFDGUIxWaitCursor、TFDQuery、TDataSource、TDBGrid再加四个 TButton 分别对应插入、更新、删除、查询。设计期把 FDQuery1.Connection 指向 FDConnection1DataSource1.DataSet 指向 FDQuery1DBGrid1.DataSource 指向 DataSource1。FDGUIxWaitCursor 的 Provider 设成 Forms避免控制台程序里等待光标报错。2.2 如果你还要接大模型做辅助生成写 SQL 骨架时想让模型帮你补参数、解释报错可以先把 TaoToken 的 Key 配好。注册入口在官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 登录后在控制台创建 API Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。接口地址统一用 https://taotoken.net/api 不要带 UTM 后缀。想先验证模型通不通用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 发一句话即可长期写代码、跑 Agent 的看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。接入细节查文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite Claude Code 相关看 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude_codeutm_campaignrewrite 。这部分只是辅助主战场还是 FireDAC 本身。3. 可复制配置FDConnection 与 FDQuery 参数骨架3.1 建库建表与连接串先看建库这一段。数据库文件放在固定路径方便反复删除重建保证每次实验都是干净状态。procedure TForm1.FormCreate(Sender: TObject); const dbPath C:\Temp\SQLiteTest.sdb; strTable CREATE TABLE MyTable( Id integer PRIMARY KEY AUTOINCREMENT, Name string(10), Age byte); begin if FileExists(dbPath) then DeleteFile(dbPath); FDConnection1.ConnectionString : DriverIDSQLite; Database dbPath; FDConnection1.ExecSQL(strTable); FDQuery1.Open(SELECT * FROM MyTable); end;这里DriverIDSQLite是 FireDAC 识别 Sqlite 驱动的关键Database指向具体文件。integer PRIMARY KEY AUTOINCREMENT让 Id 自增插入时不用管它。建表用 ExecSQL查询用 Open两者别混。3.2 参数化插入模板插入统一走占位符值用数组按顺序给比 Format 拼接安全得多。procedure TForm1.Button1Click(Sender: TObject); const strInsert INSERT INTO MyTable(Name, Age) VALUES(:name, :age); begin FDConnection1.ExecSQL(strInsert, [AAA, 11]); FDConnection1.ExecSQL(strInsert, [BBB, 22]); FDConnection1.ExecSQL(strInsert, [CCC, 33]); FDConnection1.ExecSQL(strInsert, [DDD, 44]); FDConnection1.ExecSQL(strInsert, [EEE, 55]); FDQuery1.Refresh; end;:name、:age是命名占位符数组顺序必须和 SQL 里出现的顺序一致。写错顺序不会报错但数据会串位这是最常见的隐形坑。3.3 更新与删除模板更新用 WHERE 锁定目标行删除用条件批量清。procedure TForm1.Button2Click(Sender: TObject); begin FDConnection1.ExecSQL(UPDATE MyTable SET Age:a WHERE Name:n, [Random(100), AAA]); FDQuery1.Refresh; end; procedure TForm1.Button3Click(Sender: TObject); begin FDConnection1.ExecSQL(DELETE FROM MyTable WHERE Age33); FDQuery1.Refresh; end;更新里:a在前、:n在后数组就是[Random(100), AAA]顺序对齐。删除条件Age33会一次干掉多行执行前最好先 SELECT 数一下影响范围。3.4 参数对照表配置项取值说明DriverIDSQLite指定 Sqlite 驱动DatabaseC:\Temp\SQLiteTest.sdb库文件绝对路径占位符:name / :age命名参数数组按序赋值刷新方式FDQuery1.Refresh写操作后同步 DBGrid自增字段Id AUTOINCREMENT插入时不赋值注意ExecSQL 用于 INSERT/UPDATE/DELETEOpen 用于 SELECT用反了会抛异常或拿不到结果集。4. 验证请求插入、更新、删除各跑一步看结果4.1 插入验证点 Button1 后DBGrid 应出现五行AAA/11、BBB/22、CCC/33、DDD/44、EEE/55。如果只出现部分检查数组顺序和 Refresh 是否执行。想确认自增主键可以加一句查询var V: Variant; begin V : FDConnection1.ExecSQLScalar(SELECT Age FROM MyTable WHERE Name :x, [BBB]); ShowMessage(VarToStr(V)); end;ExecSQLScalar 拿单值这里应弹出 22。它适合做存在性校验比如插入后确认某行确实落库。4.2 更新验证点 Button2AAA 的 Age 会被随机数覆盖。因为用了 Random(100)每次点结果不同正好验证更新确实生效。DBGrid 里 AAA 那行的 Age 变了说明 UPDATE 命中。若没变先确认 WHERE 的 Name 值拼写和库里一致Sqlite 默认区分大小写。4.3 删除验证点 Button3Age 大于 33 的行被清掉。按上面的数据DDD/44、EEE/55 会消失剩下 AAA、BBB、CCC。删除后 DBGrid 行数减少就是成功信号。想更稳可以在删除前用 ExecSQLScalar 数一下SELECT COUNT(*) FROM MyTable WHERE Age33心里有数再动手。4.4 事务与回滚默认每条 ExecSQL 自动提交。要保证一组操作可回滚显式开事务FDConnection1.StartTransaction; try FDConnection1.ExecSQL(INSERT INTO MyTable(Name, Age) VALUES(:n, :a), [FFF, 66]); FDConnection1.ExecSQL(UPDATE MyTable SET Age:a WHERE Name:n, [77, FFF]); FDConnection1.Commit; except FDConnection1.Rollback; raise; end;Commit 前任何一步出错Rollback 都能把整组撤销这就是可回滚、可复现的基础。5. 本篇常见错排查5.1 报 no such table: MyTable多半是建表没执行成功或者 Database 路径指向了另一个文件。检查 FormCreate 里 ExecSQL(strTable) 是否真的跑了路径是否和查询时一致。Sqlite 不会自动建库文件路径写错会新建一个空库表自然不存在。5.2 参数数量不匹配报 Array index out of bounds 或参数个数错误通常是占位符数量和数组元素数量对不上。数一遍 SQL 里的冒号再数数组一一对应。命名占位符重复出现时FireDAC 按出现顺序取值重复的也要重复给值。5.3 更新删除影响 0 行SQL 没报错但数据没变先查 WHERE 条件。Name 值带空格、大小写不一致、Age 类型不匹配都会导致命中 0 行。用 ExecSQLScalar 先 SELECT 同条件数一下能快速定位。5.4 DBGrid 不刷新写操作后忘了 FDQuery1.Refresh界面还是旧数据。Refresh 会重新执行当前 SELECT代价不大增删改后都加上。如果 Refresh 报数据集未打开先确认 FDQuery1 处于 Active 状态。5.5 自增 Id 拿不到插入后想立刻拿新 Id用SELECT last_insert_rowid()var NewId: Int64; begin FDConnection1.ExecSQL(INSERT INTO MyTable(Name, Age) VALUES(:n, :a), [GGG, 88]); NewId : FDConnection1.ExecSQLScalar(SELECT last_insert_rowid()); ShowMessage(IntToStr(NewId)); end;这是 Sqlite 的标准做法别去猜 Id 值。6. 把骨架用起来下一步怎么接到这里FireDAC 下 Sqlite 的插入、更新、删除骨架就齐了连接串固定 DriverID 加 Database写操作走 ExecSQL 加命名占位符读操作走 Open改完 Refresh成组操作套事务。你可以把这套模板直接搬进自己的项目把表名和字段换掉即可。如果你在写这些 SQL 时想让模型帮忙补参数、解释报错或者做代码审查可以走 TaoToken 的 APIhttps://taotoken.net/api Key 在 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 创建接入方式看文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。长期做 Delphi 编码和 Agent 自动化的Coding Plan 在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。先把上面四个按钮跑通再谈扩展。

相关新闻

marshalsea 架构深度解析:Ruby Marshal/YAML 反序列化防御库的组件设计与攻防边界

marshalsea 架构深度解析:Ruby Marshal/YAML 反序列化防御库的组件设计与攻防边界

【免费下载链接】Cybersecurity-Projects Building 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 👇 项目地址: https://git…

2026/9/30 4:11:45 阅读更多 →
GNN与GCN工程实战:消息传递、变体选型与数据建模排查

GNN与GCN工程实战:消息传递、变体选型与数据建模排查

简介:这是一份关于图神经网络(GNN)的深度讲解PPT,共100页,面向希望系统入门图神经网络的研究生、算法工程师及对非欧式数据建模感兴趣的开发者。内容从“为什么需要图神经网络”切入,先厘清欧式数据与非欧式…

2026/9/30 3:55:36 阅读更多 →
FastExcel捐赠Apache而非跑路:孵化流程、坐标迁移与Java Excel库的治理升级

FastExcel捐赠Apache而非跑路:孵化流程、坐标迁移与Java Excel库的治理升级

1. 仓库停更、Issue 没人回,FastExcel"跑路"的传闻从哪来的1.1 一次例行依赖检查发现的异常上个月我在整理一个老项目的依赖清单,顺手打开 FastExcel 的 GitHub 仓库想看看有没有新版本可以升级。结果邮件通知里那封 release 订阅信的日期还停…

2026/9/30 4:56:39 阅读更多 →

最新新闻

交换机VLAN配置详解:PVID、Tag与Untag到底怎么用?

交换机VLAN配置详解:PVID、Tag与Untag到底怎么用?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 6:12:47 阅读更多 →
PyTorch手写Vision Transformer:从原理到图像分类实战

PyTorch手写Vision Transformer:从原理到图像分类实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 6:12:47 阅读更多 →
深度学习训练不收敛?学习率过大过小的症状、原理与系统调参方法

深度学习训练不收敛?学习率过大过小的症状、原理与系统调参方法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 6:12:47 阅读更多 →
智能工厂DeepSeek AI智算一体机:边缘计算与云边协同的落地实践

智能工厂DeepSeek AI智算一体机:边缘计算与云边协同的落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 6:12:47 阅读更多 →
通过苏宁开放平台API获取北京时间的实现与优化

通过苏宁开放平台API获取北京时间的实现与优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 6:12:47 阅读更多 →
私有云建设方案落地:从PDF到物理设备的7道技术关卡

私有云建设方案落地:从PDF到物理设备的7道技术关卡

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 6:11:47 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →