Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带VBA的MS Access锁链接表_Vba_Ms Access_Linked Tables_Record Locking - Fatal编程技术网

带VBA的MS Access锁链接表

带VBA的MS Access锁链接表,vba,ms-access,linked-tables,record-locking,Vba,Ms Access,Linked Tables,Record Locking,我对数据库设计比较陌生,但我有4-6年的编程经验(主要是Java)。我能够设计一个已经运行得很好的数据库,即使是在网络上。它分为后端和前端,每个用户都有一份FE。我使用DMax设置订阅者的ID,因为每个订阅者都需要一个唯一的、连续的ID 我唯一的问题是,当用户同时添加订户时,它只会保存最后添加的内容。当一个用户添加信息时(使用VBA),是否有方法锁定链接表 如果可能,其他用户是否可以验证该表是否已锁定 谢谢大家! 编辑: 这是生成数字的代码。它还检查序列中是否有空格(例如,如果有5,6,8,则将

我对数据库设计比较陌生,但我有4-6年的编程经验(主要是Java)。我能够设计一个已经运行得很好的数据库,即使是在网络上。它分为后端和前端,每个用户都有一份FE。我使用DMax设置订阅者的ID,因为每个订阅者都需要一个唯一的、连续的ID

我唯一的问题是,当用户同时添加订户时,它只会保存最后添加的内容。当一个用户添加信息时(使用VBA),是否有方法锁定链接表

如果可能,其他用户是否可以验证该表是否已锁定

谢谢大家!

编辑:

这是生成数字的代码。它还检查序列中是否有空格(例如,如果有5,6,8,则将其设为7)

Dim计数器为整数
计数器=1
作为布尔值的Dim验证
验证=错误
最大值=Nz(最大值(“数字”),0)+1
而验证=False
如果不为null(DLookup(“[Numero]”,“[Numero]”,“[Numero]”=“&Nz([counter],0)),则

如果(counter您没有解释您在何处/如何使用效率极低且浪费的代码,或者关于表单的许多其他内容,那么我将不得不使用我的水晶球,只提供一个可行的解决方案。使用记录锁设置为“无”的绑定表单,在before_update事件中,添加以下内容:

If Me.NewRecord Then
numero = nz(dmax("[Numero]", "Inscripciones"), 0) + 1
End If

如果删除记录,则在编号中出现间隙的唯一方法是。如果这是一个问题,则应使用理货表。

这并不能直接回答您的问题。但在循环中查找第一个缺失的数字效率非常低,尤其是在已经存在多个连续数字的情况下

例如,如果表的数字为1..200,则您的代码将调用
DLookup
200次。这使得两个实例同时运行此循环并得到相同结果的可能性大大增加

相反,使用如下SQL查询查找第一个缺失的数字:

SELECT MIN(i1.Numero + 1) AS Missing
FROM Inscripciones i1
  LEFT JOIN Inscripciones i2
    ON i2.Numero = i1.Numero+1
WHERE i2.Numero IS NULL
(改编自)

这将运行得非常快。请在保存记录之前纠正此错误,发生冲突的可能性将非常小。如果由于重复的数字而发生错误,请捕获错误并重新运行查询


请注意,此查询不会找到缺失的数字1。如果这是一个相关的情况,请单独检查。

您可能正在寻找信号量的概念-。但为什么不使用自动编号列,并免费获取它?@Andre,因为我需要它是连续的(1,2,3…)代替没有连续值的自动编号。这是一个非常好的主意,我正在考虑,但是,我需要某种类型的队列,因为可能有两个以上的用户。谢谢!显示您的代码!@AVG Hi,我刚刚添加了一个数字生成代码的示例!谢谢谢谢您,安德烈!我能够使用该查询,并将我的代码改编为那就是。我添加了1的验证。锁定问题很少出现,我处理了所有与此相关的错误。我的代码现在可以工作了,再次感谢!订阅者需要一个连续的ID,正如我在问题中解释的那样,代码在这些连续中寻找漏洞,如果没有,它将使用max。Andre的查询非常有效谢谢你花时间帮我解决这个问题。
SELECT MIN(i1.Numero + 1) AS Missing
FROM Inscripciones i1
  LEFT JOIN Inscripciones i2
    ON i2.Numero = i1.Numero+1
WHERE i2.Numero IS NULL