好的,有几件事:
鉴于这不是拆分?好的,要检查的东西少了。
所以,你有这个设置:
对于有问题的测试表,你有这个:
现在,我们假设您不会在这里遗漏一些巨大的巨无霸,对吧?
首先 - 我们假设没有其他人,或者没有其他程序打开此文件。
我们假设您根本没有任何启动代码 - 但只是启动到该表单?对(如果你有启动代码——尤其是打开数据库或打开表的任何代码?所有的赌注都关闭了!
下一步:因为这是一台单用户机器 - 我会重新启动 - 只是为了确保没有任何杂散的 Access 正在运行或由于所有这些测试而继续运行。
请注意,表格必须打开相关表格。在 Access UI 应用程序通过表单打开该表之前运行任何类型的代码。
以上内容非常重要!!!
为什么?
因为 DAO 代码、VB 代码或任何其他在您的访问应用程序之前打开文件的程序或过程?然后你不会得到行锁定。
以上提示还包括任何 VBA + DAO 代码!!!
您看,JET(现在是 ACE)行锁定功能?使用此功能只有一种方式,而且只有一种方式:
它仅适用于 MS-Access UI。这意味着在 Access UI(表单)打开单个表之前,没有 VBA 代码可以执行此操作,没有 vb.net 代码或任何其他系统或代码可以运行。
为什么?
第一人称+进程将确定行锁定功能是否开启。我想再三强调一下,只有 UI 才能使 ACE/JET 数据引擎使用此行锁定功能。
换句话说:
如果在应用程序启动时运行打开表的任何代码(DAO 或 ADO 代码),那么首先打开数据库的代码将从那时起强制所有其他程序、表单甚至 MS-Access 表单不使用行锁定。 (您会获得页面锁定)。
所以,这是第一次设置。
导致表打开的第一个进程将确定是否要打开行锁定。发生这种情况的唯一可能方式是 MS-Access UI 打开一个带有表单的表(任何表)。在 UI 打开表格之前,您不能运行任何触及表格的代码。因此,任何类型的启动代码,甚至是创建持久连接的代码(相当常见)都会忽略行锁定功能。
如果有任何其他外部程序,比如 FoxPro 中的 ODBC,或者甚至是 vb.net、c# 等中的代码,在 Access UI 拿到表之前打开数据库?然后再一次,不使用行锁定(当然会使用页面锁定)。
因此,不能在代码中设置翻转、标志、行锁定开关。 (您可以通过代码在访问中设置选项 - 但随后您会收到有关必须重新启动访问的提示(如果您更改该行锁定功能,则必须这样做)。因此,代码可以更改设置,但永远不会直到你重新启动才会生效。因此,代码不能在启动时设置它(只更改告诉访问在启动时要做什么的设置 - 一旦代码开始运行,在代码中更改它为时已晚。
因此,请记住,您首先需要启动某个绑定到表格的表单,并且该表单必须在任何 DAO 或任何其他类型的 VBA 代码抓取或打开一个表格之前首先运行通过 DAO 或 ADO 代码表。
如果代码使用 DAO/ADO 对象模型,那么您会绕过 Access UI,因此无法告诉 JET/ACE 使用行锁定。这是 MS-Access 功能,而不是 JET/ACE 数据引擎功能。因此,您必须确保打开该表的是 Access UI。一旦发生这种情况,那么任何和所有其他代码、表单甚至外部 ODBC 连接现在都将遵循行锁定功能。