2012-08-14 183 views
3

在我的Access数据库中,我有一个名为“Demande”的表。我想读取“Numero de Commande”栏中的所有记录并阅读栏中最大的数字,以便我可以将该数字用于下一个新记录。访问VBA:查找列中的最大数量并添加1

因此,这里是我的表:

Table Picture

密钥索引对于NÚMERO德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

只要列只包含没有字母的话,可以用数值:

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

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

+1

这是什么,但单用户环境极其危险的。 – Fionnuala 2012-08-14 09:51:39

+0

我不知道这很容易。完美的作品,只有1行代码。谢谢 – 2012-08-14 09:52:37

+1

@PaoloBernasconi你不会是这篇文章的唯一读者。 – Fionnuala 2012-08-14 09:55:14

4

关于获取序列号的一些说明。这需要对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