【问题标题】:Access VBA: Find max number in column and add 1访问 VBA:在列中查找最大数并加 1
【发布时间】:2012-08-14 09:39:49
【问题描述】:

在我的 Access 数据库中,我有一个名为“Demande”的表。我想读取“Numero de Commande”列中的所有记录并读取该列中最大的数字,以便我可以将该数字用于下一条新记录。

这是我的桌子:

关键索引是针对 Numero de Commande 的。

这是我目前的代码:

 Dim highestInt as Integer
 Dim newNumeroCommande as Integer

 Set currentDatabase = CurrentDb
 Set rstDemande = currentDatabase.OpenRecordset("Demande")

 ' Find the highest integer in the column "Numero de Commande"

 newNumeroCommande = highestInt + 1
 rstDemande.AddNew
 rstDemande("Numero de Commande").Value = newNumeroCommande 
 rstDemande.Update

感谢大家的帮助。

【问题讨论】:

    标签: ms-access find vba


    【解决方案1】:

    只要该列仅包含没有字母的数值,那么您就可以使用:

    NewNumeroCommande = Dmax("[Numero de Commande]", "Demande") + 1
    

    注意:这不是我推荐的方法,而只是 Access 的一个内置选项,如果可能的话,您可以使用自动编号来省去麻烦,或者您可以有一个单独的“计数器”表来记录最高记录number,当您希望创建另一个时,您可以锁定此表,将值加一(然后使用它)然后释放锁定,这在多用户环境中会更有效。

    【讨论】:

    • 这在除了单用户环境之外的任何环境中都是极其危险的。
    • 我不知道它这么容易。完美运行,只有 1 行代码。谢谢
    • @PaoloBernasconi 你不会是这篇文章的唯一读者。
    • @Remou 很公平,这不是我自己会使用的东西,因为我们都太熟悉了,但这次我想我会让用户看看它是如何为他们工作的,并让他们如果出现错误,请进一步调查,老实说,我很懒惰。我将添加一些解释。
    • @PaoloBernasconi 理想的方法是没有任何意义的字段,然后可以通过自动编号提供下一个数字。如果你必须有一个序列很重要的字段,你需要更多的代码和一个小表来保存种子。
    【解决方案2】:

    关于获取序列号的一些说明。这需要引用 Microsoft ActiveX 数据对象 x.x 库

    序号

    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strSQL As String
    Dim lngResult As Long
    Dim strCon As String
    
        lngResult = 0  'assume fail
    
        strCon = "Provider=" ''Connection to back-end
        cn.Open strCon
    
        rs.CursorType = adOpenKeyset
        rs.LockType = adLockPessimistic
        rs.CursorLocation = adUseServer
    
        ''Where BEInfo is a single line table
        strSQL = "SELECT ASeqNumber FROM BEInfo"
    
        rs.Open strSQL, cn, , , adCmdText
    
        'Note this is ADO, so no rs.Edit
        rs!ASeqNumber = rs!ASeqNumber + 1
        rs.Update
    
        lngResult = rs!ASeqNumber
    
        ''This should not happen, but just to be sure
        If DCount("ASeqNumber", "Table", "ASeqNumber=" & lngResult) > 0 Then
            lngResult = 0
        End If
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2019-02-11
      • 1970-01-01
      • 2022-12-22
      相关资源
      最近更新 更多