1

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

以下结构(SQL-Server 上的所有表):

  • 导入(未连接到 Access)
  • 产品(通过 ODBC 连接到 Access)
  • 定价(通过 ODBC 连接到 Access)

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

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 访问中被锁定?以及如何在查询/作业运行后解锁它们或使其自行解锁?

谢谢

4

4 回答 4

0

当 SQL Server 插入新行时,这些新行实际上被独占锁定以防止其他事务读取或操作它们——这是设计使然,这是一件好事!这是你无法改变的——没有这些锁你就无法插入。

你可以通过提交它们被插入的事务来解锁它们——一旦它们被提交到 SQL Server,你就可以再次正常访问它们。

于 2017-04-28T08:15:56.833 回答
0

我收到的错误消息说,数据集已被另一个用户更改,如果我保存它,我将撤消其他用户的更改。(并要求我复制到剪贴板)。

这与“锁定”不同,完全正常。

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

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

于 2017-04-28T12:03:49.780 回答
0

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

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

于 2017-05-17T14:02:06.570 回答
0

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

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

于 2017-06-09T14:46:14.300 回答