【问题标题】:Delphi Edit DBGrid and Update Database in Read Only Mode?Delphi 在只读模式下编辑 DBGrid 和更新数据库?
【发布时间】:2013-01-24 01:11:09
【问题描述】:

所以我有一个填充了 SQL 查询的 DBGrid。我希望查询是只读的,这样程序运行时表就不会被锁定。问题是当它设置为只读时,我根本无法编辑表格。

我想要做的是能够在只读模式下编辑 DBGrid 上的字段,然后一次更新它,这样我就不必打开连接。

不过,我不太确定该怎么做。 DBGrid 没有 OnChange 事件,因此我不能在每次更改单元格时都运行更新查询。

有人有什么想法吗?

【问题讨论】:

  • 为什么在保持连接打开时表格会被锁定?不应该。

标签: sql database delphi dbgrid


【解决方案1】:

这就是写TClientDataSet 的确切原因。它允许您拍摄数据快照,将其存储在内存中,像实际数据集一样对其进行更新,然后轻松地将这些更新应用回原始数据库。

有一个教程here 还不错。您可以在 Scalabium 找到另一本,在 Embarcadero 网站上找到 series,Cary Jensen 后来把它变成了一本书(您可以在亚马逊上找到它——手边没有链接)。

【讨论】:

  • 我已经完成了大量使用 DBGrid 和 Query 的工作。如果我使用 TClientDataSet ,我是否必须重做所有事情?我真的不想这样做。
  • 没有。这是更改数据集并将查询读取到 ClientDataSet 的问题。我在大约一个小时内将一个大量使用实际数据库来存储数据条目行的应用程序转换为使用 ClientDataSet,以便它可以在离线(公文包)模式下工作。
  • 例如,我有一个按钮可以让你添加新行,尽管打开一个新查询并在查询执行后关闭它。
  • 在这种情况下,您不必执行新查询来添加行;您只需在 CDS 中输入Insert。请花时间查看我为教程提供的链接,而不是在 cmets 中提出其他问题。 :-)
  • 你会阅读我发布的链接吗?我已经说过TClientDataSet 是专为您的问题设计的精确 解决方案,但我不会重写我已经链接的几个教程和文档来尝试说服您。 :-) 其他人做得比我好得多,并且比 SO 有更多的可用空间来回答问题。我提到的切换到 CDS 的数据库每天将数千行插入到包含大约 200 万行的数据库中,这些行连接到几十个其他表,它工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多