可以通过 DBGrids 更新复杂的查询吗?
Posted
技术标签:
【中文标题】可以通过 DBGrids 更新复杂的查询吗?【英文标题】:Can complex queries be updated via 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.html 也msdn.microsoft.com/en-us/library/aa198446(office.10).aspx @Remou 感谢您的回复。我认为您提供的链接对我来说是无价的。 问题的 DBGrid 部分无关紧要。当涉及多个表或使用参数时,不能使用“选择”查询来更新数据。 @No'amNewman 如果结构正确,可以使用选择查询在 MS Access 中进行更新。这是德尔福的限制吗?因为它通常不是数据库的限制。 @Remou 请将您的评论复制(或展开)到答案中,以便我接受。 【参考方案1】:我无法回答 Delphi,但在 MS Access 中,如果您希望它们可更新,则需要正确构建查询并包含键列。这对于大多数数据库来说都很常见,我怀疑问题的原因比 Dephi 本身的任何原因都大。
更多信息:
When can I update data from a query? Why is my query read-only?【讨论】:
【参考方案2】:如果您使用(ADO)DataSet > Provider > ClientDataSet
布局,那么您所要做的就是实现Provider.OnGetTabelName
事件。
【讨论】:
【参考方案3】:通常我在更新 sql 中使用此语句: 更新 where field = ;
是的,在我的数据库设计中,每个表都必须有一个主键,这样我才能完全更新一行。 多年来,这种组合(带有主键的表 + 更新 sql)对我来说就像是一种魅力。 实际上到现在为止。
最好的尊重 伊拉克
【讨论】:
以上是关于可以通过 DBGrids 更新复杂的查询吗?的主要内容,如果未能解决你的问题,请参考以下文章