SQL 服务器行在插入后对于 Access 不可编辑

SQL Server rows not editable for Access after Insert

我遇到了这个问题:我正在使用 SQL Server 2008R2 后端和 MS Access 2000 前端,其中一些 table 是通过 ODBC 连接的。

以下结构(表全部在 SQL-服务器上):

我想用来自产品和导入的一些数据自动填充定价 table。这应该 运行 作为一个带有 T-SQL 脚本的 SQL 代理作业。 我想使用以下命令从 "Products" 插入数据:

INSERT INTO Pricing (Productnr, Manufacturernr)
    (SELECT Productnr, Manufacturernr 
     FROM Products 
     WHERE Valid = 1 
       AND Productnr NOT IN (SELECT Productnr FROM Pricing ));

紧接着插入的行被锁定以供访问,我无法更改任何内容。如果我使用 SQL Server Management Suite 执行 sql 查询,或者如果我以 SQL 代理作业开始查询,一切正常。

为什么查询 运行 后在 ms access 中锁定行(即使成功完成)?以及如何解锁它们或使其在 query/job 运行?

之后立即解锁

谢谢

当 SQL 服务器插入新行时,这些新行实际上 独占锁定 以防止其他事务读取或操作它们 - 这是设计使然,而且好东西!这是您无法更改的 - 如果没有 那些锁,您无法插入

您可以解锁它们,方法是提交它们被插入的事务——一旦它们被提交到SQL服务器,您可以再次正常访问了。

The error message i get says, that the dataset has been changed by another user and if i save it, i would undo the changes of the other user. (and asks me for copying into clipboard).

这与"locked"不同,完全正常。

如果您有一个 ODBC 链接 table(或基于 table 的表单)打开,并在后端更改数据,Access 不知道更改。

您需要在 Access 中进行完全重新查询 (Shift+F9) 以重新加载数据,之后可以再次编辑所有记录。

现在找到了我的问题的解决方案。

我必须在定价中添加时间戳行 table,以便访问可以识别更改。

Access在第一次访问table时将数据加载到前端。如果后端中的某些内容更改了数据,您需要先使用 Access 刷新它,然后才能从前端对其进行编辑(或查看更改)。

通过(在 Access 中)关闭并重新打开 table 或切换到 table 并按照 Andre 的建议按 shift-F9 或以编程方式使用重新查询语句来执行此操作。您必须重新查询,而不是刷新,才能释放锁并注册在 SQL.

中所做的更改