sql-server - 如何使直通/直通查询可编辑?

标签 sql-server ms-access ms-access-2007 passthru pass-through

在带有 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 

查询现在是可更新的:
The Access Query Window shows Data from the SQL Server according to the SQL Select statement

评论:
  • 并非每个 SQL 语句都使表或 View 可更新。有关限制和约束,请参阅 CREATE VIEW (Transact-SQL) (https://msdn.microsoft.com/en-us/library/ms187956.aspx) 中的“可更新 View ”部分。
  • 要在 Access 中更新的基础表必须具有时间戳或 RowVersion 列。
  • 关于sql-server - 如何使直通/直通查询可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18898032/

    相关文章:

    sql-server - SQL Server 2005 插入触发器没有插入足够的记录

    excel - Access/Excel VBA : Getting the two dates corresponding to last week

    sql - 无法删除和更新 Access 链接表上的记录

    sql - 从命令行执行 SQL 脚本

    sql-server - 大型 SQL 数据库上的索引

    ms-access - 表单字段更新后更新相关表中的字段

    vba - MS Access VBA是否有“关闭时”事件?

    ms-access - 计算控件不会自动重新计算

    c# - SQL Server 数据库密码

    database - MS Access - 计算