首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有VBA的MS访问锁链接表

带有VBA的MS访问锁链接表
EN

Stack Overflow用户
提问于 2017-04-23 18:02:54
回答 2查看 703关注 0票数 1

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

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

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

谢谢!

编辑:

这是生成数字的代码。它还检查继承中是否有空位(例如,如果有5,6,8,它将使其为7)。

代码语言:javascript
复制
            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条指令。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-24 22:48:23

这不能直接回答你的问题。但是,在循环中查找第一个丢失的数字是非常低效率的,特别是如果已经存在多个连续的数字。

例如,如果表的编号为1.. 200,则代码将调用DLookup 200次。这使得两个实例更有可能同时运行这个循环,并得到相同的结果。

相反,使用这样的SQL查询来查找第一个缺少的数字:

代码语言:javascript
复制
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

(改编自here)

这会跑得很快。在保存记录之前,把这个问题做好,碰撞的机会就会很小。如果由于重复编号而发生错误,则捕获错误并重新运行查询。

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

票数 1
EN

Stack Overflow用户

发布于 2017-04-24 22:44:42

您并没有解释在哪里/如何使用非常低效和浪费的代码,也没有解释关于表单的许多其他内容,所以我必须使用我的水晶球,并提供一个可行的解决方案。在before_update事件中,使用记录锁设置为none的绑定窗体,添加以下内容:

代码语言:javascript
复制
If Me.NewRecord Then
numero = nz(dmax("[Numero]", "Inscripciones"), 0) + 1
End If

只有当你删除记录时,你才会在编号中有空白。如果这将是一个问题,你应该使用一个理货表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43574641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档