【发布时间】:2018-07-23 22:46:16
【问题描述】:
我在通过 MS Access 更新 SQL Server 视图时遇到了一些问题。用于此的表集是基于基表构建的。这个基表就是这种格式。
Id int (not-nullable; auto-assigned)
A1 varchar(50) (nullable)
A2 varchar(50) (nullable)
B1 varchar(50) (nullable)
B2 varchar(50) (nullable)
C1 varchar(50) (nullable)
C2 varchar(50) (nullable)
此表中的一行由我们公司的多组用户更新。例如,用户组“A”更新列“A1”和“A2”,用户组“B”更新列“B1”和“B2”,等等。但是,我们还想防止用户组“A”更新用户组“B”的列。为此,我设置了一个视图,其中包含适合每个用户组的列。例如,用户组“A”的视图将只包含“Id”、“A1”和“A2”列。然后我将 SSMS 中视图上的“绑定到架构”选项设置为“是”,并在每个视图的“Id”列上设置一个唯一的聚集索引。在 MS Access 中,我使用 ODBC 连接将这些视图作为链接表连接到。当我在设计视图中打开 MS Access 中的表并检查索引时,它确实将“Id”列正确识别为主键。
这就是问题所在:当我尝试在其中一个视图中通过 MS Access 更新记录时,有时更新会立即运行,但有时更新会超时。这是我得到的错误。
“SM_Notes_Bridge”是我的一个视图的实际名称。我可以在网上找到的几乎所有以前的答案都说增加了在 MS Access 中更新超时之前的时间,这似乎不是我的问题的解决方案,因为更新要么立即运行,要么超时。没有中间立场。
另一个注意事项是我目前是唯一使用此基表和这些视图的人。此外,重要的系统是围绕该基表结构开发的,因此更改其结构需要很多说服力。
【问题讨论】:
-
能否请您简要描述一下。没有人会花时间阅读这一切。
-
当然。我会花一些时间尝试将其简化。
-
谢谢 .. 听起来不错 -:)
-
要尝试的事情:1)如果您直接链接Access中的基表,并在那里编辑记录,是否会发生超时? 2)删除视图上的唯一索引。它们并不是真正需要的,您只需在链接视图时告诉 Access
Id是 PK。 -
我会在 sql server 中进行更新,而不是通过查询。这意味着创建一个存储过程,然后您将从 Access 中执行该过程。这将开始在您的应用程序中构建层,在某些时候您会很感激,因为如果这个应用程序变得很大,您将需要一个不同的前端。如果您的 sql 分散在应用程序中,这将非常困难。如果数据工作在数据库中,或者至少在数据层中,这会变得简单很多。
标签: sql sql-server ms-access odbc jet-sql