
数据库操作
文章平均质量分 76
pcplayer
这个作者很懒,什么都没留下…
展开
-
Delphi 的 DataSetProvider.Options 里面的 poCascadeUpdates 修改嵌套表的主键
假设主表和从表的非主键字段的值在客户端同时被修改,提交后,会在服务器端的 DataSetProvider1.BeforeUpdateRecord 触发事件。可以在事件里面判断当前触发的是主表还是从表。因为程序员知道每个表的字段名称,因此可以针对当前触发事件的表的记录的每个字段,进行权限控制,或者值的修改,等等。也就是业务逻辑控制在服务器端,安全性更高。原创 2023-10-12 23:12:18 · 403 阅读 · 0 评论 -
再谈 FireBird 的自增字段用 FireDAC 来处理
基于 MIDAS 的多层架构的数据库程序,客户端是 ClientDataSet,数据库服务器是 FireBird,服务器端采用 FireDAC 的数据库控件,如何处理数据库端的自增字段。之前我有博客文章介绍具体做法。这里更新一下另外一种做法,。原创 2022-09-17 01:58:52 · 850 阅读 · 0 评论 -
EhLib 数据库记录的下拉选择
通过下拉选择,知道用户选择了数据库里面的哪条记录。仅仅是用来知道,而不是用来输入。有一个表,有很多记录。提供一个界面让用户从表里面选择一条记录。程序获取用户的选择结果。最简单的方法,给一个 DBGrid,用户将游标走到选择的记录(通过滚动和鼠标点击 DBGrid 里面的一条记录),然后程序读其对应的 DataSet。DBGrid 太占空间。最好是一个类似 Edit 的东西,然后有一个下拉按钮,点这个按钮,下来出来一个框,框里面有多条记录供用户选择。选择结果要显示到这个 Edit 里面。采用 EhLib 的控原创 2022-07-03 00:04:19 · 563 阅读 · 0 评论 -
Delphi SOAP WebService 服务器端多个 SoapDataModule 要注意的问题
本人之前有篇博客文章,讲到在 Delphi 的 Soap WebService 程序服务器端,使用多个 TSoapDataModule 的方法。文章地址在这里:https://blog.youkuaiyun.com/pcplayer/article/details/110178123内置 IdHTTPServer 的独立的 WebService 服务器端,内部有多个 TSoapDataModule,服务器端运行时,在 Delphi IDE 里面,通过 TSoapConnection 连接服务器端,ClientDataS原创 2022-06-15 02:06:45 · 2539 阅读 · 0 评论 -
再谈 Firebird / Interbase 自增字段和WebService MIDAS 框架下的 ClientDataSet
架构:1. 数据库服务器:FireBird;2. WebService 服务器端,采用 FireDAC 控件 + DataSetProvider;3. WebService 客户端,采用 ClientDataSet 绑定到服务器端的 DataSetProvider;4. 数据库表名:TEST,有2个字段:XUHAO, DESC;其中 XUHAO 是整数,我希望它是个顺序自增的字段,是主键,也是本文关注处理的对象。代码需求上述架构下,连接数据库的控件,采用 FireDAC 还是其它原创 2022-01-13 21:31:24 · 820 阅读 · 0 评论 -
关于 Firebird 数据库的备份
备份方式:1. 使用 Firebird 自己带的备份工具 gbak.exe;2.使用 Firebird 自己带的备份工具 nbackup.exe;3.使用 Firebird 自己带的备份工具 fbsvcmgr.exe;4. 在 Delphi 里面,使用 FireDAC 的控件:TFDFBNBackup 和 TFDFBNRestore 做备份和还原。各种方式的特性(本人亲自测试的结果)1.使用 Firebird 自己带的备份工具 gbak.exe:可以跨网络执行,将远...原创 2021-12-23 22:15:18 · 1572 阅读 · 0 评论 -
Firebird 备份工具 nbackup 的
nbackup介绍nbackup是Firebird 2.0新带来的备份工具。它提供了gbak—Firebird以前就有的备份工具—所没有的能力—但是并不取代后者。两个程序都有其长处和短处;他们在一定的将来将共存一段时间。nbackup功能—总体介绍使用nbackup,你可以进行两类不同的功能操作:1. 建立和恢复完整的和增量的备份操作。一个增量备份只包括自某一上次备份以后的变化。2. 锁定主数据库文件,然后你可以根据自己的选择使用复制工具或者备份工具来备份。在这种模式下,nbacku翻译 2021-12-23 11:42:36 · 329 阅读 · 0 评论 -
再谈 Firebird / Interbase 自增字段和 FireDAC 以及 ClientDataSet
之前我有篇文章谈到这个:InterBase、FireBird 的自增字段和 FireDAC 数据库控件_pcplayer的博客-优快云博客最近做了一些进一步的研究,以下是研究结果。FireDAC 的要点:1. FdQuery 采用 select 语句打开表后,默认,是可以编辑的,然后它的 Post 会自动将编辑的数据保存回到数据库;2. FdQuery 的属性 CacheUpdates 默认是 False 的,这时候 Post 是可以直接保存到数据库的。如果是 True 则需要执行 F原创 2021-08-06 17:40:37 · 719 阅读 · 0 评论 -
DataSet 的 DisableControls 的问题
概念:对大量的数据做循环处理时,为了避免 DataSet 在游标不停地跑时,数据敏感控件随之不停刷新界面,导致代码运行速度下降,通常的做法是断开数据敏感控件和 DataSet 的连接。正确的做法是执行 DataSet.DisableControls;在循环跑完后再执行 DataSet.EnableControls 恢复对界面上数据敏感控件的刷新支持。做法:在 Delphi 里面,假设我们使用一个 DBGrid1 --> DataSource1 --> ClientDataSet1原创 2021-04-16 17:34:17 · 573 阅读 · 0 评论 -
使用 FireDAC 提供的对本地内存表的 SQL select 支持
FireDAC 提供了对本地内存表的数据,使用 SQL SELECT 语句进行查询的功能。不管是 FdQuery 还是 TClientDataSet,在其打开以后,数据都在本地内存,所以称之为本地内存表。有时候我们需要对本地内存表的数据进行查询,不是使用 DataSet 的 Find, Locate, Filter 等功能,而是使用 SELECT 语句,因为这样可以实现对多个表的联合复杂查询。FireDAC 提供了这样的功能。实现方法:1. 假设我们有一个本地内存表 FdQuery2,它的数据来原创 2021-04-08 22:13:11 · 796 阅读 · 0 评论 -
使用 ADO 导入 CSV 文件
这次下载的库存数据是 CSV 文件。这个文件的格式是:1. 以逗号分隔;2. 分隔的除了逗号,还在两头加上了双引号。因此,在两个双引号中间的内容是可以包含逗号的,因为在两个双引号中间,这样的逗号不应该被解释为分隔符。在 Delphi 底下:1. Ehlib 也可以导入 CSV 但是对格式的兼容比 FireDAC 更差;2. FireDAC 的 DataMove 支持从 csv 读入并写入 DataSet; 但是,对于特定的 csv 文件(内容里面有逗号)识别不好会出错,可能(而不是必原创 2021-03-25 23:36:17 · 1456 阅读 · 0 评论 -
使用 Ehlib 将数据输出为 Excel,采用 TDataSetTextExporterEh
要想输出数据,网上搜了一下和 Ehlib 有关的导出的文章,都是讲如何输出 DBGridEh 的内容的。如果我只想输出一个 DataSet 的内容,没有 DBGridEh 怎么办?使用 TDataSetTextExporterEh.拖一个 TDataSetTextExporterEh 过来到我的 DataModule 里面,就是DataSetTextExporterEh1然后使用:DataSetTextExporterEh1.DataSet := ADataSet; //这个 ADat.原创 2021-02-02 22:32:03 · 472 阅读 · 1 评论 -
Delphi SOAP WebService 服务器端多个 SoapDataModule 的做法
以下描述的实验结果,在 Delphi 10.3.3 社区版上测试通过。前情提要:Delphi 写 WebService 架构的三层程序如何维护 Session简述:用 Delphi 实现 WebService 服务器端,客户端也使用 Delphi 来开发。服务器端,可以用 TSoapDataModule 在设计期,可视化地拖放数据库控件,连接数据库,从数据库获取数据,并通过 TDataSetProvider 输出给客户端。在客户端,则可以在服务器运行的情况下,使用 TSoapConne.原创 2020-11-26 12:24:27 · 1025 阅读 · 0 评论 -
Delphi 写 WebService 架构的三层程序如何维护 Session
问题由来:如果是基于 TCP/IP 长连接的远程服务,比如 Delphi 新版推荐的 DataSnap,它支持基于客户端和服务器端的 TCP 长连接,服务器端甚至可以通过这个连接回调客户端,向客户端发起主动通知。那么,一个 Session 就是一个这样的长连接。但是,WEB 访问,是短连接。一次操作,就建立一次连接,操作完成,连接断开。下次操作,重新连接。因此,假设用户登录过后,继续其它操作,服务器端如何知道下次操作的这个连接还是上次登录的那个客户端?在使用网页访问的 WEB Server 上面原创 2020-09-13 16:49:44 · 1230 阅读 · 0 评论 -
MIDAS 框架下 Firebird 自增字段 ClientDataSet 里面的处理方法
虽然 Delphi 新推出了 DataSnap 模式的跨网络多层数据库框架,但我还是喜欢原来的基于 MIDAS 的多层数据库框架。如果要运行在 Internet 上,我更倾向于采用 WebService 架构下使用 MIDAS,这样比较少写代码。进入正题。MIDAS 框架下,从数据库到客户端是这样构成的:1. FDConnection1 连接数据库;2. FDQuery1 执行 select 语句获得表数据;3. DataSetProvider1 连接 FDQuery14. C.原创 2020-09-09 12:45:33 · 589 阅读 · 0 评论 -
Firebird 使用 GUID 字段在 Delphi 中如何操作
FireBird 数据库里面没有专门的 GUID 类型的字段。采用字段类型为:Char(16) OCTETS 可以存储 GUID;在 Delphi 里面,用 FireDAC FdQuery 去打开有这个字段的表,对应的字段类型是:TBytesField;强行将这个字段改为 TGUIDField 类型的字段,打开表会出现类型不匹配的异常;同样,ClientDataSet 里面对应的字段类型也是 TBytesField,不能强制为 TGUIDField 类型的字段;如果某个 ClientDataS.原创 2020-09-09 01:18:11 · 670 阅读 · 0 评论 -
FireDAC 学习 - 8:三层数据库,一次提交多个表的数据
如本人上一篇博客《FireDAC 学习 - 7:三层数据库,一次传递多个表的数据》所说,可以一次性获取多个表的数据到客户端。在客户端编辑完成后,同样可以一次性提交客户端的 Delta 到服务器端,最后提交给数据库服务器。先看代码:procedure TDataModule2.ApplyUpdates;var AStream: TMemoryStream;begin{--------------------------------------------------------------原创 2020-07-18 12:24:21 · 1507 阅读 · 0 评论 -
FireDAC 学习 - 7:三层数据库,一次传递多个表的数据
需求在 MIDAS 架构下,主从表可以采用嵌套表的方式,一次性将多个嵌套的表的数据传递到客户端。假设有主从表 FdQuery1 和 FdQuery2,大致做法如下:1. 在服务器端,FdQuery1 和 FdQuery2 分别对应数据库服务器里面的一个表。它们对应的表有主从关系,主表的主键字段名为 ID;从表的外键字段名也是 ID;2. 服务器端,DataSource1 对应 FdQuery1。3. FdQuery2 的 SQL 语句大概是:select * from Table2 w...原创 2020-07-17 21:11:03 · 4061 阅读 · 2 评论