3

在我的 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

谢谢大家的帮助。

4

2 回答 2

4

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

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

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

于 2012-08-14T09:47:34.980 回答
4

关于获取序列号的一些说明。这需要参考 Microsoft ActiveX 数据对象 xx 库

序号

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
于 2012-08-14T10:46:05.107 回答