UniDAC使用教程(二):数据更新

翻译|使用教程|编辑:李爽夏|2019-01-29 13:38:55.000|阅读 158 次

概述:本篇文章介绍使用UniDAC数据集组件进行数据编辑的常用方法。

相关链接:

下载UniDAC最新版本

Universal Data Access Components (UniDAC)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi, C++Builder, Lazarus (以及 Free Pascal) , Mac OS X, iOS, Android, Linux和64和32位的FreeBSD等等。我们将长期的经验集于这个小组件,提供统一的数据库连接访问(如oracle、微软SQL等等)。这意味着您可以在您的项目之间轻松地切换不同的数据库,以及创建跨数据库应用程序接口。

本篇文章介绍使用UniDAC数据集组件进行数据编辑的常用方法。

  • 自动数据更新
  • 数据更新的扩展设置
  • 缓存更新
  • 默认值/表达式
  • 自动增量值生成
  • 及时获取最新数据

自动数据更新

TUniTable, TUniQuery和TUniStoredProc是允许检索和编辑数据的UniDAC组件。要编辑每个组件的数据,请在KeyFields属性中指定键字段名称。如果KeyFields为空字符串,则Oracle、PostgreSQL、Interbase、SQLite和所有基于ODBC的提供程序都将尝试从发送附加查询的服务器请求有关主键的信息(这可能会对性能产生负面影响)。SQL Server和MySQL提供程序将使用服务器发送的元信息和数据。SQL Server提供程序具有UniqueRecords选项,该选项允许在查询中省略主键字段时自动从表中请求主键字段。

如果要打开的数据集没有唯一标识记录的字段,则可以通过服务器的方式通过Oracle、Firebird 2.0、PostgreSQL和SQLite服务器来解决这个问题。对于Oracle和SQLite服务器,您应该将RowID列添加到查询中。带Firebird 2.0 - DB_KEY。如果您的表是使用OID创建的,那么可以使用PostgreSQL服务器OID列作为关键字字段。

数据更新的扩展设置

对于具有来自多个表的数据的数据集,默认情况下只有一个表是可更新的。您应该在UpdatingTable属性中指定要更新的表名,否则属于字段列表中第一个字段的表将是可更新的。如果SetFieldsReadOnly选项设置为True(默认情况下),则自动生成的更新SQL语句中未使用的字段将标记为只读。对于复杂查询(使用多个表、同义词、dblinks、聚合字段的语句),我们建议使用Oracle、PostgreSQL和所有基于ODBC的提供程序启用 ExtendedFieldsInfo 选项。

如果插入/发布、更新或刷新记录操作影响了多个记录,UniDAC将引发异常。要禁止此类异常,应将StrictUpdate选项设置为False。

为了更灵活地控制数据修改,可以填充update-SQL语句。它们由SQLInsert、SQLUpdate、SQLDelete和SQLRefresh 属性表示,并在Insert/Post、Edit/Post、Delete和Refresh操作中自动执行。在设计时,可以在组件编辑器的“SQL Generator”选项卡上生成默认的更新SQL语句。可以根据需要修改生成的语句。但是,如果为每个记录动态生成更新查询,则只有更改后的值才会发送到服务器。

对于某些特定情况,此功能不够。它可以通过TUniUpdateSQL组件进行扩展。TUniUpdateSQL允许为每个更新操作关联一个单独的TUniSQL/TUniQuery/TUniStoredProc组件。

缓存更新

UniDAC允许在客户端缓存更新(所谓的“Cashed Updates”),然后批量发布所有更新。这意味着在调用Post或Delete之后,更改不会立即反映在服务器上。调用ApplyUpdates方法后,所有缓存的更改都将发布到服务器。UpdateBatchSize选项允许设置要同时发布的更改数。

默认值/表达式

如果已经为数据库表中的列定义了默认值或表达式,则可以设置UniDAC,以便它从服务器请求这些表达式。这些表达式将分配给TField对象的DefaultExpression 属性。如果已填充默认表达式值,则将替换这些值。此行为由默认值选项控制,默认情况下禁用该选项。

自动增量值生成

编辑数据集时,通常不方便手动填充关键字字段值,而是自动生成它们。有三种方法可以做到。

第一种方法,最有用的方法,是使用服务器方法自动生成关键字字段值。

SQL Server、MySQL和SQLite允许在表中定义自动增量列。这不需要在客户机上进行额外的处理。对于SAP Sybase ASE、Oracle、PostgreSQL和Interbase提供程序,需要指定特定于keysequence(Interbase的KeyGenerator)的选项。自动生成的值自动反映在数据集中。

第二种方法是在BeforePost事件处理程序中生成并填充关键字字段值。通常,这种方式需要执行查询以从服务器检索一些信息。所以这种方法可能只在某些特定的情况下有用。

第三种方法是创建AFTER INSERT触发器,用适当的值填充字段。但返回触发器生成的值时出现问题。尽管这个问题可以解决(见下一段),但这种方法被认为是非最优的。因此,如果可能,尝试选择另一种方法。

但是,可以使用特定于QueryIdentity的选项为SQL Server提供程序禁用检索生成的值。这将提高记录插入的性能。

及时获取最新数据

在某些情况下,UniDAC允许自动刷新数据集中的记录,以使其值保持最新。

使用刷新选项,您可以在编辑前、插入或删除后使UniDAC刷新当前记录。它是通过执行一个附加的查询来完成的。

DMLRefresh选项允许在插入或更新后刷新当前记录,与RefreshOptions类似,但其工作方式不同。这允许实现比刷新选项更高的性能。基于MySQL、SQLite和ODBC的提供程序不支持DMLRefresh。

如果要控制插入或更新后需要刷新当前记录的哪些字段,应执行以下操作:在更新查询中定义与数据集中字段名称对应的名称的输出参数,并将ReturnParams选项设置为
True。执行更新查询后,数据集读取输出参数的值,并将其放入具有相应名称的字段中。

购买UniDAC正版授权,请点击“咨询在线客服”哟!

PyCharm


标签:数据库服务器

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果

登录 慧都网发表评论


暂无评论...

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关厂商
相关产品
UniDAC

UniDAC 是一个通用数据访问控件,支持几乎所有数据库格式,支持64位系统。

购物车 在线客服 在线QQ 电话咨询
400-700-1020
反馈
在线客服系统
live chat