【问题标题】:Can complex queries be updated via DBGrids?可以通过 DBGrids 更新复杂的查询吗?
【发布时间】:2012-07-01 20:02:35
【问题描述】:

我同时在自学 Delphi 的数据库架构和 [MS-Access] SQL。我了解如何将 Tables 和 DBGrids 连接在一起,享受网格中的更改如何自动编辑、插入、附加、更新、发布等到基础表。

我还了解如何打开或执行 [ADO]Query 并在网格中查看结果数据。

我对通过编辑显示查询结果的 DBGrid 来更改表感到更加困惑。在我的在线搜索中,我发现的所有编辑查询结果的示例似乎都涉及不比“SELECT ... FROM oneTable”更复杂的查询。似乎 DBGrid 仅用于处理单个表或显示查询结果。

就我自己而言,当我尝试处理涉及两个或多个表的查询结果时,我总是会遇到某种错误(键列信息不足、缺少参数或其他消息)。我觉得我缺少一些基本的东西,或者 DBGrids 很少用于编辑除单个表之外的任何内容。你有什么建议可以让我了解我所缺少的吗?最常见的建议链接(例如 delphi.about.com 上的 db 课程)并不能解决问题。

编辑:Remou 的回答对我解释我遇到的问题很有帮助。因此,我将通过仅推广 MS-Access 数据库来稍微编辑我的问题。可以通过 DBGrids 更新其他流行数据库中的复杂查询吗?

【问题讨论】:

  • 我无法回答 Delphi,但在 MS Access 中,如果您希望它们可更新,则需要正确构建查询并包括关键列:allenbrowne.com/ser-61.htmlmsdn.microsoft.com/en-us/library/aa198446(office.10).aspx
  • @Remou 感谢您的回复。我认为您提供的链接对我来说是无价的。
  • 问题的 DBGrid 部分无关紧要。当涉及多个表或使用参数时,不能使用“选择”查询来更新数据。
  • @No'amNewman 如果结构正确,可以使用选择查询在 MS Access 中进行更新。这是德尔福的限制吗?因为它通常不是数据库的限制。
  • @Remou 请将您的评论复制(或展开)到答案中,以便我接受。

标签: database delphi ms-access


【解决方案1】:

我无法回答 Delphi,但在 MS Access 中,如果您希望它们可更新,则需要正确构建查询并包含键列。这对于大多数数据库来说都很常见,我怀疑问题的原因比 Dephi 本身的任何原因都大。

更多信息:

【讨论】:

    【解决方案2】:

    如果您使用(ADO)DataSet > Provider > ClientDataSet 布局,那么您所要做的就是实现Provider.OnGetTabelName 事件。

    【讨论】:

      【解决方案3】:

      通常我在更新 sql 中使用此语句: 更新 where field = ;

      是的,在我的数据库设计中,每个表都必须有一个主键,这样我才能完全更新一行。 多年来,这种组合(带有主键的表 + 更新 sql)对我来说就像是一种魅力。 实际上到现在为止。

      最好的尊重 伊拉克

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-22
        相关资源
        最近更新 更多