【问题标题】:SQL Views vs. MS Access queries --- Updating data affects multiple base tablesSQL 视图与 MS Access 查询 --- 更新数据会影响多个基表
【发布时间】:2014-07-19 04:17:14
【问题描述】:

我有兴趣了解有关在 MS Access 中使用 SQL 视图与本地查询的更多信息。我喜欢这样一个事实,即视图基本上是一个存储在服务器上的查询,运行 Access 的本地计算机将其“视为”一个表。

由于性能原因,我有时会查看查询,因为它通常会使表单加载速度更快。但是,如果我在不同基表中的两个不同字段中进行更改,我会遇到无法更新视图的问题。即使使用正确的连接等正确构造了视图。

只是想知道是否有更有效和更合适的方法来构建可以更新的查询。

【问题讨论】:

  • 能否通过存储过程运行更新?这是从 Access 更新 SQL Server 中数据的最安全方法。
  • @Dave.Gugg 我不熟悉通过 Access 使用存储过程,但我会很感兴趣。你有什么推荐的吗?我实际上将视图绑定到 MS Access 中的表单,然后用户通过更新表单上的文本框来进行更改(如果有意义)。
  • 我将它设置为通过存储过程(或多个过程,每个适用的控件一个)填充表单,然后当他们进行更改时,通过存储将新值发送到 SQL将这些值作为参数的过程。这使您可以准确控制可以更改的数据,这很重要,因为 Access 的安全性非常薄弱。
  • @Dave.Gugg 我会调查的。谢谢。
  • @Dave.Gugg 你有这样的例子吗?

标签: sql-server performance ms-access sql-view


【解决方案1】:

用户一次不能更新多个表。这是给定的。您需要构建表单(可能使用子表单)以使用单个表视图、可更新的简单视图或表来表示数据。

子表单基本上是父表单的左连接。喜欢

SELECT * 
FROM ParentForm P
LEFT JOIN SubForm S
 ON P.ParentID   <~~Link Master Field
    = S.ParentID <~~Link Child Field

因此您可以使用子表单重新创建视图。

如果您的视图过于复杂而无法适应此模式,则它可能无法更新,这可能意味着您想要更新的数据位于单个表中,但视图中的所有其余信息都是支持信息。即显示以支持用户做出决定。

在这种情况下,您应该使表单的Record Source 成为您要更新的表/视图(可更新)。然后在支持数据进入可更新表/视图的组合框/列表框/控件中,您可以创建复杂视图的 Row Source

无论视图在哪里(在 Access 中或在服务器上),如果它的构造方式无法确定应该更改哪个表中的哪条记录,那么其他任何事情都不重要。您需要以不同的方式设计整个表单。

【讨论】:

  • @mntyguy 好的,在这种情况下,也许您可​​以使用查询(或其代表版本)、表单的设置方式以及您期望的方式来扩展您的问题。
  • 谢谢,布拉德。总的来说,我确实遵循这些指导方针,并且我理解这一切。通过“更复杂”,我基本上是指被查询的记录/表的数量,而不是连接或设计本身。我更喜欢查询视图,因为它更快。那么,为什么用户能够使用 Access 查询对多个更改进行更改呢?是因为 Access 对这些表进行了索引,并且知道如何根据主键等进行一致的更新吗?
  • 这是一个例子:基本上我有一个绑定到查询(或视图)的表单,该表单链接一个名为 CONTACT_LOCATION 的表(基本上包含与特定位置的人相关的字段)和一个名为 CONTACT 的表(联系人特定信息,例如名字、姓氏等)因此,如果用户在 CONTACT 表中更新联系人的名字,然后对 CONTACT_LOCATION 表中的字段进行更改,则会由于以下原因而被拒绝你指定的。所以这是一个子表单可能不合适的情况。不过我可能错了。
  • 如果有意义的话,CONTACT_LOCATION 表用于 LOCATION 和 CONTACT 之间的多对多关系。 (一个联系人可以在多个位置,一个位置可以有多个联系人。)在我的联系人表单上,我想显示并允许查看/编辑联系人的特定信息,同时还允许查看/编辑该人在该位置的信息例如他们的头衔、兴趣程度等。如果这没有意义,请告诉我。非常感谢您的意见。
  • 我并不是说 Access Query 对 SQL Server 视图有任何特殊的权力。我认为如果您制作一个不可更新的视图,那么另一个系统中的相同视图仍将不可更新。
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
相关资源
最近更新 更多