MS访问锁定链接表与VBA



我对数据库设计相对较新,但是我有4 - 6年的编程经验(主要是Java(。我能够设计一个数据库,即使在网络上也可以很好地工作。它在后端和前端分开,每个用户都有Fe的副本。我使用dmax设置订户的ID,因为每个订户需要一个独特的,连续的ID。

我唯一的问题是,当用户同时添加订户时,它只会节省最后一个添加。当一个用户添加信息(使用VBA(时,有没有办法锁定链接表?

如果可能的话,其他用户可以验证表是否锁定?

谢谢!

编辑:

这是生成数字的代码。它还检查连续中是否有空的空间(例如,如果有5,6,8,它将成为7(。

            Dim counter As Integer
            counter = 1
            Dim validation As Boolean
            validation = False
            max = Nz(DMax("Numero", "Inscripciones"), 0) + 1
            While validation = False
                If Not IsNull(DLookup("[Numero]", "Inscripciones", "[Numero] = " & Nz([counter], 0))) Then
                    If (counter <= max - 1) Then
                        counter = counter + 1
                    Else
                        validation = True
                    End If
                Else
                    validation = True
                End If
            Wend

在按下按钮之前,该记录不会以任何方式保存。这个数字生成发生了5个说明,然后再保存记录。

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

例如。如果表的数字为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。如果是相关的情况,请单独检查。

您没有解释您在何处/如何使用该表格的极低效率和浪费的代码,因此我将不得不使用我的水晶球,只提供一个可行的解决方案。在tre_update事件中,使用bount bound form lock locks设置为none,添加以下内容:

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

您在编号中遇到差距的唯一方法是删除记录。如果这是一个问题,则应使用一个Tally表。

相关内容

  • 没有找到相关文章

最新更新