下载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。执行更新查询后,数据集读取输出参数的值,并将其放入具有相应名称的字段中。

转载于:https://blog.51cto.com/14048826/2347545

UniDAC使用教程(二):数据更新相关推荐

  1. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  2. Konstrukt PHP REST框架 教程二

    Konstrukt PHP REST框架 教程二 入门 - 第2部分 在本教程中,我们假设你已经完成了第一个教程,因为它的基础上产生的代码从该. 谈判的Content-Type 在大多数情况下会发出一 ...

  3. Mac下Android studio 之NDK配置教程(二)

    Mac下Android studio 之NDK配置教程(二) (一)简述 从上一篇NDK配置教程(一) 中,我 简单的阐述了MAC下NDK的基本解压和环境配置步骤. 本节我讲详细描述android s ...

  4. python elasticsearch 入门教程(二) ---全文搜索

    python elasticsearch 入门教程(二) ---全文搜索 截止目前的搜索相对都很简单:单个姓名,通过年龄过滤.现在尝试下稍微高级点儿的全文搜索--一项 传统数据库确实很难搞定的任务. ...

  5. openlayers地图旋转_OpenLayers教程二:实现简单的地图显示

    本文衔接上一篇文章:不睡觉的怪叔叔:OpenLayers教程二:实现简单的地图显示​zhuanlan.zhihu.com 经过上一篇文章对OpenLayers的简单了解以后,现在让我们来实现一个简单的 ...

  6. 计算机java语言教程,计算机JAVA教程二讲Java语言基础知识.doc

    计算机JAVA教程二讲Java语言基础知识 2.1简单数据类型 2.1.1 标识符和保留字 1.标识符 程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier).Java语言 ...

  7. Java 结构体之 JavaStruct 使用教程二 JavaStruct 用例分析

    使用环境 前一篇在介绍 JavaStruct 类时指定了使用库使用环境为 Java 5 及以上,也即开发我们使用的 JDK 版本为1.5及以上就可以了.以下讲解的用例可以直接将 code 直接粘贴到 ...

  8. C#微信公众号开发系列教程二(新手接入指南)

    此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可直接跳过,也欢迎大神吐槽. 微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教 ...

  9. MIP开发教程(二) 使用MIP-CLI工具调试MIP网页

    初始化 MIP 配置 新建一个 MIP 网页 编写 MIP 网页代码 校验 MIP 网页 调试 MIP 网页 1. 初始化 MIP 配置 首先在html目录下进行初始化 MIP 配置: $ mip i ...

  10. oracle存储sql片段引入_强大的跨数据库访问组件 UniDAC使用教程:注释和SQL函数...

    Universal Data Access Components (UniDAC)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi,C++Builder, La ...

最新文章

  1. seaborn箱图(box plot)可视化、并且在箱图中使用三角形标注均值的位置(showmeans=True)
  2. 前端的小玩意(5)——用dojo写的二级下拉菜单自动添加功能
  3. mysql遵循acid_mysql关系型数据库遵循ACID规则
  4. python3.7.2教程-centos7系统下python2与python3共存
  5. 十大迷你iPhone天气应用
  6. c++编码规范_Python02编码规范
  7. XCTF-Reverse:simple-unpack
  8. 【模拟】Ingenious Lottery Tickets
  9. python调用菜单响应事件_[Python] wxpython 编程触发菜单或按钮事件
  10. 海归硕士程序员吐槽:我回国竟然找不到工作,这到底是什么操作?
  11. 步步为营!高手教你如何有效使用深度学习解决实际问题
  12. Android应用及应用管理
  13. c语言中eles后面分号的作用,C语言 if else 语句详细讲解
  14. pcap文件linux怎么打开,pcap文件用什么打开
  15. 《大话数据结构》-1-数据结构绪论-基本概念-数据,数据结构,逻辑结构,物理结构等
  16. 常用原型图绘制工具比较
  17. android 魅族手机bug多,魅族Flyme出现大面积Bug
  18. 杭州电子科技大学OJACM 2049题 (必AC及其易错点)
  19. 华为u8500开启log方法
  20. HTML 限制文本框只能输入特定字符(比如数字 onkeyup+onafterpaste)

热门文章

  1. Django models Form model_form 关系及区别
  2. PHP中memcached的使用
  3. [转载] 七龙珠第一部——第097话 龙争虎斗
  4. 将BYTE[] 输出到edit控件中
  5. 【转载】Wireshark基本介绍和学习TCP三次握手
  6. Lua入门系列----pil学习笔记之Getting Start
  7. 模拟浏览器发送请求报文
  8. Jupyter Notebook 添加目录
  9. 从CTO到创始人 孙元浩基础软件破局之路
  10. NSArray排序问题