在带有 SQL Server Backend 的 Microsoft Access 2007 中,我们通常会从 SQL Server 中获取一个链接表作为可编辑表单的 Form.RecordSource 来对单个表数据进行修改。本地查询用于组合来自多个链接表的字段的交叉表版本。本地查询本身必须是可更新的,以便修改编辑表单上的数据。
现在我们计划用直通查询替换所有本地查询,以便直接使用 native SQL Server 表。
我尝试使用以下 SQL 字符串创建一个名为 qrySelProductsPassThroughEditable 的非常简单的直通查询:
SELECT dbo.Products.ID, dbo.Products.Name FROM dbo.Products;
ID 字段是在 SQL Server 中定义为 Primary Key 的 IDENTITY 字段,定义如下:CREATE TABLE [dbo].[Products](
[ID] [int] IDENTITY(1,1) NOT NULL,
....
)
但是 Access 传递查询返回的数据表根本不可编辑。所以它也不能用作编辑表单的 .RecordSource 。这与 the link 相反。这表示如果 passthru 查询包含所有相关表的所有主键,则该查询将是可编辑的。
结论增加了一个后验
通过下面的讨论,Microsoft Access 2007 .accdb、.accde 或 .accdr(Access 运行时)中的直通查询始终是只读的,永远不可编辑。您应该将其用作最终列表或报表的 .RecordSource,而不是用于必须使用链接表的表单或涉及数据 IO 链接表的可写普通查询。
最佳答案
在 MsAccess 查询窗口中打开任何 SQL Server Select 语句(表、 View 或具有许多连接表的 sql-select)并可以编辑/更新,有一种更简单的非文档化方法:
打开 Access 查询窗口并输入您的 SQL 语句。将表名替换为方括号内的 SQL Server 的完整 ODBC 字符串,后跟一个点以及架构和表名,如下例所示:
前:
SELECT SOH.SalesOrderID, SOH.OrderDate
FROM Sales.SalesOrderHeader as SOH
后:
SELECT SOH.SalesOrderID, SOH.OrderDate
FROM [ODBC;Driver=SQL Server;Server=myServer;Database=AdventureWorks2012;Trusted_Connection=Yes;MarsConn=yes;].Sales.SalesOrderHeader as SOH
查询现在是可更新的:
评论:
关于sql-server - 如何使直通/直通查询可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898032/