访问 VBA:在列中查找最大数并加 1
Posted
技术标签:
【中文标题】访问 VBA:在列中查找最大数并加 1【英文标题】:Access VBA: Find max number in column and add 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
感谢大家的帮助。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于访问 VBA:在列中查找最大数并加 1的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA - 搜索范围和连接的 SQL ADODB 记录集以在列中匹配写入结果集
将行与标题进行比较,然后在列中插入值并在 VBA 中进行重复检查