FireDAC 学习 - 5:三层,远程提交,公文包模式

delphi 官方提供的六十多个FireDAC例子 FireDAC是一套独特的通用数据访问组件,用于为Delphi和C ++ Builder开发多设备数据库应用程序。凭借其强大的通用架构,FireDAC支持从Delphi到InterBase,SQLite,MySQL,SQL Server,Oracle,PostgreSQL,IBM DB2,SQL Anywhere,Access,Firebird,Informix等的本地高速直接访问。 基于10年为数据库后端编写本地驱动程序的经验,FireDAC被构建为一个强大的访问层,支持构建真实世界高负载应用程序所需的所有功能。 FireDAC为访问不同的数据库后端提供了一个通用的API,而不会放弃对特定数据库特定功能的访问,也不会影响性能。 它使开发人员能够专注于开发应用程序,而不是关注数据库交互的复杂性。它提供了一组现代功能丰富的组件来解决所有主要的RDBMS环境。它使用一组组件来解决所有支持的RDBMS类型。它通过提供以下方面来降低总体拥有成本: 与单独的昂贵库相比,初始成本更低。 学习和熟悉独特的强大图书馆所需的时间更少。 针对不同数据库时的直接应用设计和开发。 立即下载

问题需求:

以前版本的 Delphi,三层架构的程序,采用 TClientDataSet 来作为客户端的内存表,所有用户操作都是针对 TClientDataSet 里面的记录进行增删改的操作。在这里,用户修改后的记录,叫做 Delta。操作完成后,可以实现以下功能:

1. 将用户增删查改从 ClientDataSet 里面读取出来,也即是 ClientDataSet.Delta,这是一个 Variant 类型的数据。通过网络通讯将这个数据传递给服务器端,服务器端可以直接把它赋予到一个服务器端的 ClientDataSet,也就是在服务器端执行 ClientDataSet1.Delta := MyDelta;然后在服务器端对这个 ClientDataset1 执行 ApplyUpdates,这个位于服务器端的 ClientDataSet1 就可以通过它关联的 DataSetProvider 将 Delta 的内容提交到数据库服务器。默认情况下是 DataSetProvider 内部的代码根据 Delta 的内容自动创建 SQL 语句,通过 SQL 语句去将更新的数据提交到服务器。

2. 客户端的 ClientDataset 里面的数据,包括增删改的记录(也就是 Delta),都可以通过 SaveToFile 的方式保存为客户端本地文件。这样当客户端离线(和服务器之间网络不通)的时候,用户可以在客户端进行操作,操作完成后保存为本地文件。下次运行程序时,从本地文件加载数据,用户可以继续操作。然后当客户端网络能够连接服务器时,用户可以提交数据到服务器端。这里提交的实际上就是上面说的 Delta 数据。这种操作叫公文包模式。也就是客户端可以离线操作。

FireDAC 对应的方式:

上述两个功能,在 FireDAC 里面,有对应的方法可以实现。

远程提交:

1. 首先从数据库服务器获取数据,用 FdQuery1 打开数据库的一个表获得数据;

2. 通过 FdQuery1.SaveToStream(AStream); 的方式将数据输出给一个 Stream,然后通过网络将 Stream 送到客户端,客户端的 FdMemTable1.LoadFromStream(AStream) 加载数据,用户可以在客户端看到数据,进行编辑操作;

3. 用户编辑操作完后,如果想将客户编辑的数据提交给服务器端,需要做以下的操作:

3.1. 首先设置 FdMemTable1 的属性,使得它只输出 Delta 而不是全部数据,这样可以降低网络流量,属性设置如下:

FdMemTable2.ResourceOptions.StoreItems := FdMemTable2.ResourceOptions.StoreItems - [siData];

上述属性可以在设计期的属性面板里面找到,默认是包含 siData 的,去掉后,就只输出 Delta 了;

3.2. 通过以下语句输出 Delta 到一个 Stream:

FdMemTable2.SaveToStream(AStream);

3.3. 将这个 Stream 通过网络传送到服务器端,由服务器端的 FdQuery1 直接加载后,提交。这里省去了 MIDAS 里面的 DataSetProvider。语句如下:

    FdQuery1.LoadFromStream(AStream);
    FdQuery1.ApplyUpdates(0);

3.4. 要执行上述语句,必须设置 FdQuery1 的 CachedUpdates 为 True,默认是 False 的。

3.5. 客户端如果提交成功,需要执行 FdMemTable2.MergeChangeLog; 否则客户端的 FdMemTable2 仍然存在已经提交成功的 Delta。

本地保存:

上述过程,用户在客户端编辑操作完成后,如果网络原因导致无法提交,如果是普通网页版本的软件,关闭浏览器以后,之前输入的数据就没有了,白干活。如果客户端是DELPHI 的 MIDAS 的或者 FireDAC 的,则可以将用户的编辑操作保存为本地文件,下次打开电脑接着干活。

1. 用户编辑完成后,执行以下语句:

FdMemTable2.ResourceOptions.StoreItems := FdMemTable2.ResourceOptions.StoreItems + [siData];
FdMemTable2.SaveToFile(GetFileDataName);

保存的时候,要保证 StoreItems 属性里面,有 siData 这样保存的文件里面有全部数据,也包括了对记录的改变(Delta)的数据。本地保存后,用户可以关闭程序,关闭电脑。

2. 下次用户打开程序,执行:

FdMemTable2.LoadFromFile(GetFileDataName);

则客户端程序加载了本地的数据,用户可以继续工作,对数据进行查看、增删改。

3. 客户端加载了本地数据后,如果这个时候能够连接服务器端,则同样可以提交客户端的 Delta 到服务器端,将用户对数据的操作保存到数据库服务器里面。

---------------------- 分割线 -------------------------

总结一下:

使用 Delphi 做数据库的三层架构的程序,大概就是:

1. 开发一个服务器端程序,连接数据库。服务器端程序负责从数据库服务器获得数据,也负责将数据提交给数据库服务器。

2. 开发一个客户端程序,客户端程序的数据从服务器端程序获取。客户端程序呈现操作界面给用户。用户在客户端程序上对数据的增删改操作,最终输出为一个 Delta 数据。客户端将这个 Delta 数据通过网络发送给服务器端,服务器端再将这个 Delta 数据变成 SQL 语句去提交给数据库服务器。

3. 上述通过网络传递数据的方法,如果采用 Delphi 提供的现成框架,之前有 WebServices 框架,现在有 DataSnap 框架。当然也有一些第三方的框架,也可以自己写网络传输的代码。

实现上述方法,在数据库层面,之前的 Delphi 采用 MIDAS 框架,涉及到的控件包括:

1. 数据库读取控件,比如 DBExpress 或者 ADO 甚至可以是 FireDAC;

2. 服务器端用于输出数据的 TDataSetProvider;

3. 客户端用于缓存数据给用户操作的 TClientDataSet;

实现上述方法,如果不使用 MIDAS 而是只用 FireDAC,涉及到的控件包括:

1. 数据库读取控件 TFdQuery;

2. 客户端用于缓存数据给用户操作的控件 TFdMemTable。

--------------------------------------

到这里,基本上 MIDAS 能做的,只使用 FireDAC 也能做到了。难怪 Delphi 开始提倡用 FireDAC,抛弃 MIDAS 了。当然,MIDAS 在新版 DELPHI 里面还可以继续使用。

DataSnap与FireDAC三层 2.保证无毒 3.简单,方便,实用 4.实例可以自行改用 5.如有非法,本人无法律责任,由改动代码人负责! 6.需要更多本人作品,查找标签“朱建强” 7.请下载,杀毒后再使用! 立即下载

相关推荐

手把手教你用STM32硬件SPI驱动BMI088陀螺仪(附完整代码)

本文提供了一份详尽的STM32硬件SPI驱动BMI088陀螺仪的实战指南。内容涵盖从硬件连接、SPI底层配置、驱动层封装到设备初始化、数据读取与同步策略,并深入探讨了数据处理、滤波融合及温度补偿等核心技巧,旨在帮助开发者构建稳定高效的IMU驱动框架,解决BMI088应用中常见的挑战。

quiet的专栏 529

Delphi 中 FireDAC 数据库连接(定义连接)

连接定义是一组参数,它定义了如何使用特定的FireDAC驱动将一个应用程序连接到DBMS。它相当于一个BDE别名、ADO UDL(存储的OLEDB连接字符串)或ODBC数据源名称(DSN)。关于支持的数据库管理系统和相应的参数列表,见FireDAC数据库连接。

sensor_WU 博客 2571

MMdetection3D与MMdetection版本匹配全攻略:从安装到测试一步到位

本文详细解析了MMdetection3D与MMdetection版本匹配的关键问题,提供了从环境配置到测试验证的完整指南。针对常见的安装错误,文章强调了版本依赖链(PyTorch、MMCV、MMDetection、MMDetection3D)精确对齐的重要性,并给出了基于CUDA 11.3等环境的实战版本组合与避坑方案,帮助用户高效部署3D目标检测开发环境。

xgboost6farmer的博客 240

Delphi 中 FireDAC 数据库连接(总览)

本系列包含一组文章,描述了如何用在Delphi中使用FireDAC设置数据库驱动和管理数据库连接。描述了为什么一组选项使FireDAC成为一个灵活的数据库框架,以及如何使用这些选项。FireDAC提供了大量的选项,这些选项被组织成一个分层的选项系统。描述了如何存储和使用FireDAC连接参数以及连接定义的含义。为了指定连接参数,一个应用程序必须使用一个连接定义。描述了如何使用FireDAC打开和关闭与DBMS的连接。描述了如何使用FireDAC的离线模式,它允许你在不与数据库持续连接的情况下处理数据。

sensor_WU 博客 1472

500道C++面试高频题解析(附答案、实战示例与进阶追问)

本文提供500道C++面试高频题的详细解析,涵盖基础概念到进阶应用,包括面向对象编程、内存管理、现代C++特性、并发编程等核心考点。每道题配有实战示例和进阶追问,帮助开发者突破八股文局限,掌握解决实际问题的能力,适合准备C++技术面试的工程师系统复习。

weixin_29002595的博客 312

高杂合度基因组组装实战:Hifiasm参数调优与purge_dups过滤效果对比(附猪毛菜案例)

本文深入探讨了高杂合度基因组组装中Hifiasm参数调优与purge_dups过滤的实战效果对比,通过猪毛菜案例详细解析了两种方法的适用场景与优化策略。文章重点分析了purge_dups在contig过滤中的显著效果,为基因组组装提供了关键的技术参考。

weixin_29232121的博客 496

FireDAC,ADO性能测试

数据量2w行,字段30个 第一次open fd读取数据用时363毫秒,ado用时783毫秒 第二次open fd读取数据用时10毫秒,ado用时553毫秒 遍历所有记录 第一次 fd读取数据用时2438毫秒,ado用时5590毫秒 第二次 fd读取数据用时1988毫秒,ado用时5548毫秒 -------------------------------------...

yhcad博客 4653

VLA-JEPA:具身智能中潜空间世界模型的工程落地实践

世界模型是具身智能实现环境理解与因果推演的核心基础,其本质是在状态空间中建模‘动作→结果’的动力学规律。传统基于像素或文本的世界模型因高维、非平稳、弱语义等缺陷,在真实机器人场景中鲁棒性差、部署成本高。JEPA(联合嵌入预测架构)通过构建物理约束的潜空间,将视觉-语言-动作(VLA)信号统一编码为低维、可微、可解释的状态表征,显著提升模型对抖动、遮挡、光照突变等干扰的适应能力,并支持实时闭环控制。该范式已在UR5e、Franka等多构型机械臂及Jetson边缘平台完成实测验证,成为VLA系统从实验室走向产线

weixin_34357928的博客 336

FireDAC 学习 - 1

之前玩 Delphi,数据库部分,用得最多的是 TClientDataSet。这个 TClientDataSet 有很多玩法,重点是它可以作为一个独立的内存表,无论数据来自什么数据库都支持,并且可以把内容保存为文件,也可以把内容通过远程传递。 新的 Delphi,TClientDataSet 还在,但有了新的 FireDAC 的整套数据库访问控件,它也包含一个 TDfMemeTable 内存表控件。这个内存表控件该如何使用?比如,来自数据库的数据,该如何放进去? 开始学习 FireDAC 的玩法。这里大

pcplayer的博客 4495

多个MOS管并联应用场景的四大要点

动态运行时,阈值电压Vgsth最低的MOS管首先打开,最后关闭。这种MOS管一般会占据更多的开关损耗,并且在开关转换过程中,承担了更高的电应力。

VBsemi的博客 3753

【Burp入门第二篇】Chrome配置BurpSuite代理教程

1、配置Burp代理为127.0.0.1:80802、扩展商店添加插件switchyomega,修改服务器和端口为下图:3、打开代理,选择刚才添加的代理

等风来 8368

FireDAC简易教程

FireDAC简易教程(Delphi)   一、VCL下的FireDAC   1.创建数据库连接: 新建一个VCL Forms Application工程,放置一个TFDConnection控件,设置其ConnectionDefName属性,这里选择SQLite_Demo。当Connected属性设置为True时,弹出一个登陆对话框。   这个Demo是没有密码的,直接点OK进入。当

ooooh的专栏 1万+

[Dify] 法律文档解析助手怎么做才敢用?先把条款提取、依据核对和人工复核分开

这篇文章围绕用 Dify 搭建法律文档解析助手时最容易被忽略的可靠性问题展开:文档能上传、模型能总结,并不等于结果就能直接用于法务判断。文章会从文档抽取、条款定位、召回片段核对、结构化输出和人工复核几个角度梳理设计思路,适合正在用 Dify 处理合同、制度、招投标文件或企业知识库问答的读者阅读。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 9381

Delphi 中 FireDAC 数据库连接(配置驱动程序)

要调整一个驱动程序的行为,你可以使用一个驱动程序配置文件或TFDPhysXxxDriverLink组件。大部分关于驱动程序配置文件的讨论也适用于TFDPhysXxxDriverLink组件。

sensor_WU 博客 1431

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Delphi 中 FireDAC 数据库连接(多线程)

如果满足以下条件,FireDAC是线程安全的。一个连接对象和所有与之相关的对象(如TFDQuery、TFDTransaction等)在每个时刻都由一个线程使用。FDManager在线程开始之前被激活,通过设置FDManager.Active为True。这意味着,在一个线程打开一个查询后,直到它的处理完成,应用程序不能在另一个线程中使用这个查询和连接对象。同样,在一个线程启动一个交易后,直到交易完成,应用程序不能在另一个线程中使用这个交易和连接对象。

sensor_WU 博客 2826

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Delphi10.4使用FireDAC数据访问组件开发数据库软件学习开发教程(2)

在此博客中,我们将为一定程度上使用过Delphi / C ++ Builder的用户解释FireDAC的基本用法。欢迎加入Delphi开发局QQ群:32422310Delphi控件源码下载网站 第二个主题 FireDAC的第一印象 FireDAC组件 使用FireDAC创建您的第一个应用程序 FireDAC的第一印象 上一篇中,我简要介绍了在Delphi / C ++ Builder中进行数据库访问的原因以及FireDAC为什么在此方面表现出色。借助FireDAC,您可以轻松快捷地实现数..

Delphi开发局QQ群:32422310 5420

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Delphi 中 FireDAC 数据库连接(处理错误)

EFDDBEngineException类是所有DBMS异常的基类。单个异常对象是一个数据库错误的集合,可以通过EFDDBEngineException.Errors[]属性访问,并由TFDDBError类表示。FireDAC结合了 "个性化 "和EFDDBEngineException异常和TFDDBError错误类的统一。"个性化 "意味着一个驱动程序可以有自己的异常和错误类,其中包含DBMS的特定信息。

sensor_WU 博客 1446

Delphi 中 FireDAC 数据库连接(设置选项)

描述了为什么选项集使FireDAC成为一个灵活的数据库框架以及如何使用这些选项。FireDAC提供了大量的选项,这些选项被组织成一个分层的选项系统,大多数选项可以保留其默认值。

sensor_WU 博客 1128

FireDAC连接池的使用

首先是,FireDAC的连接池必须使用TFDManager,由TFDManager来对池进行管理,使用ConnectionDef管理数据连接参数,其中主要使用INI配置文件或AddConnectionDef增加配置的方式。以前一直习惯用ADO,后来用FireDAC时也没怎么使用连接池,前段时间对FireDAC的连接池做了一些简单的学习,当时的学习重点放在了连接的配置参数方面。

tanqth的专栏 5236

Delphi 学习了解FireDac【缓存更新、记录的状态之UpdateStatus】

RAD Studio 10.3 测试√ 成功连接数据库后【连接参考】Delphi FireDAC连接MySQL数据库 1、在窗体上面放一个cxGrid控件,设置属性 然后发现表格中并没有数据,接下来点击 cxGrid 中的 Customize ,然后在右边找到 Columns 可以手动添加点击右边的Add,或者直接检索表中字段点击右边的 Retrieve Fields ,这时候字段就有了。继续搞 2、设置 FDQuery 属性,缓存更新设置为True 3、对数据修改了,需要提交才可以保存在数据库。这时在

小印丶的笔记 2199

RAD Studio的FireDAC控件如何连接ORACLE数据库

2.OCI 是 Oracle 的底层 API,支持 Oracle 数据库的所有功能,包括连接管理、SQL 执行、事务控制等。①安转Oracle Instant Client文件(内涵需要的oci.dll文件)并新增系统变量中的Path路径。1.FireDAC控件直接连接Oracle数据库会报protocol的错误,这是因为FireDAC通过。建议:安装Oracle官网的21版本,可以兼容19C和11g版本的数据库链接。)封装了 OCI 的调用,简化了与 Oracle 数据库的交互。

m0_68972210的博客 909

FireDAC 学习 - 3:建立数据库连接 之 TFDManager

使用数据库,第一步是建立和数据库的连接。结果关于连接,不是第一篇,而是本系列第三篇。 我使用 FireBird 开源数据库作为测试。FireDAC 支持 FireBird。 在本系列第一篇,我没有仔细说 FDConnection1 是如何与数据库建立连接的。我用了最简单的办法,也就是双击设计期拖到界面上的 FDConnection1,它会弹出一个对话框。在那个对话框里面进行设置就好了,如下图: 如上图,我指定 FireBird 数据库文件 TESTDATA.fdb 的全路径名称给 DataBase

pcplayer的博客 4413

DataSnap与FireDAC三层资源文件介绍:项目核心功能/场景

DataSnap与FireDAC三层资源文件介绍:项目核心功能/场景 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在软件开发领域,数据库连接与管理始终是关键环节。DataSnap与FireDAC三层资源文件介绍项目,为您提供了一套高效的数据库操作解决方案。该项目基于DataSnap和FireDAC技术,旨在帮助开发者构建稳定、安全且易于维护的数据库应用。 项目技术分...

gitblog_06721的博客 356

Delphi FireDAC连接MySQL数据库

RAD Studio 10.3 测试√ 所需控件:FDConnection、FDPhysMySQLDriverLink、FDQuery、DataSource 说明:连接的是MySQL,其他的差别应该不是很大(只是猜测),只是简单连接数据库。 步骤: 1、新建一个DataModule(数据模块)【类似于窗体】 2、在FireDAC选项卡中找到主角TFDConnection控件,放到DataModule窗体上,把LoginPrompt设为False,这样在连接时就不会弹出登陆对话框了,也可以选择放弃这一步。

小印丶的笔记 3689

firedac连接mysql,FireDAC连接数据库

1.建立DataModule2.在FireDAC选项卡中找到我们的主角TFDConnection控件,并放到DataModule窗体上,把LoginPrompt设为False,这样在连接时就不会弹出登陆对话框了。然后再找到TFDManager控件,也放到DataModule窗体上,并且把Active属性设为True,这样一来,在引用了本单元的其它单元中,就可以直接把FireDAC控件的Connec...

weixin_33046149的博客 1181
上一篇: FireDAC 学习 - 4:属性继承
下一篇: FireDAC 学习 - 6:CachedUpdates 模式下查看被删除的记录
pcplayer
博客等级 码龄26年 633粉丝 284原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值