gpt4 book ai didi

database - 使用事务和数据感知组件编写 Delphi 数据库应用程序的首选方法

转载 作者:太空狗 更新时间:2023-10-30 01:44:48 26 4
gpt4 key购买 nike

使用事务和数据感知组件编写 Delphi 数据库应用程序的最佳方式是什么?

我必须编写一个访问 InnoDB 表的客户端应用程序,并在事务中执行一些主从类型的操作。在对事务做了一些研究之后(从一般的角度来看),然后我谦虚地得出一个结论,即非数据感知组件和手工编码的 SQL 将是事务的“完美匹配”;但数据感知组件不会。它们似乎不是为彼此而生。

我确实需要使用事务,但另一方面我不能就这样丢弃数据感知组件,因为它们大大简化了事情。

谁能给我讲讲?我一直在谷歌搜索,但我没有找到任何有用的答案。可能因为我的英文不够好,所以我的关键字有限。

顺便说一句,我正在使用 Delphi 7,目前正在评估 UniDAC 作为数据访问库。

谢谢。

编辑

描述我的问题的一个方面的例子:

想象一下上面有 2 个 DBGrid 的表单。第一个网格是 MasterGrid,其上方是这些按钮:添加、编辑和删除。第二个网格是 DetailGrid。如果用户点击添加,那么它会像这样:

  • Connection.StartTransaction
  • Master.Append 然后 Master.Post 然后 Master.Edit(所以主数据集有自增主键,现在是可编辑的)
  • 以模态方式显示编辑表单,用户在其中填写主记录,并使用另一个表单添加一些详细记录。
  • 如果用户单击“确定”,应用程序将执行 Master.Post 和 Connection.Commit。如果用户单击取消,则该应用程序将执行 Connection.Rollback。

我知道交易应该越短越好,但是你可以在上面看到,交易只和用户填表的速度一样短。

如果我使用的是非数据感知组件,我会根据用户输入创建自定义插入 SQL,然后在 StartTransaction 和 Commit 之间执行 SQL。所以我可以实现非常短的交易。

编辑 2

感谢大家的热情参与。我从 vcldeveloper 中选择了答案,因为它是最接近我当前需求的解决方案。

最佳答案

我想我理解你的问题。使用例如打开 TADODataSet 时要在表单上编辑 10 行数据,使用数据感知组件,在某些情况下,您可能希望缓存对所有 10 行所做的所有更改(可能还有删除和插入)并将其作为一批提交.您不能在第一次更改时打开事务,因为那样会阻止其他用户更改相同的数据。事务应尽可能短。

我在草图场景中所做的是在链中使用以下组件:

TADOConnection >> TADODataSet >> TDataSetProvider >> TClientDataSet >> TDataSource >> TDBEdits 等

现在所有更改都缓存在 TClientDataSet 中,您可以调用它的方法 ApplyUpdates 以在一个快速事务中发布所有更改。请注意,也可以将多个 TADODataSet 和多个 TClientDataSet 用于具有嵌套数据集的主从(-detail-etc)结构。所有主从更改也可以在一个事务中分批缓存和应用。有关实现此功能的所有详细信息,请参阅其他地方的帮助和资源。起初并不容易。但是,如果您弄清楚了,这很容易,并且提供了很多可能性。 (离线编辑、应用前检查更改等)

关于database - 使用事务和数据感知组件编写 Delphi 数据库应用程序的首选方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833432/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com