在前面有字母的列中查找下一个数字

Finding next number in column preceded by a letter

我已经为某些人创建了一个表单,用于 add/modify 访问 table 中的记录。我需要做的是编写一个函数,在用户添加新记录时自动从列中查找下一个可用数字。

我遇到的问题是我需要递增的列中的数字前面有一个 R 或一个 W,所以我不能只使用 DMax 函数。我正在写一个输入框来询问第一个字符,然后我需要它来搜索最大的数字并为他们提供下一个可用的数字。

例如列有:

R1000
R1001
W1000
R1002
W1001
W1002
R1003

当用户指定 "R" 我需要它 return “1004” 作为下一个可用的。

编辑:因此,由于我有一个有效的代码,因此可能需要将其移至其他类别。我只是不知道这是否是最有效的:

Dim MaxValue As Integer
Dim db As dao.Database
Dim rs As dao.Recordset

Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT GlobalAcct FROM TestTable")

rs.MoveLast
rs.MoveFirst

MaxValue = 0

Do While Not rs.EOF
    If MaxValue = 0 Or CInt(Right(rs!GlobalAcct, 4)) > MaxValue Then
        MaxValue = CInt(Right(rs!GlobalAcct, 4))
    End If

    rs.MoveNext
Loop

MaxValue = MaxValue + 1
Debug.Print MaxValue

这是一个函数,它将 return 代表以您传入的任何字母开头的最大帐户的 long。

Public Function GetLastAccount(ByVal sPrefix As String) As Long

    Dim rs As ADODB.Recordset
    Dim aSql(1 To 4)  As String

    aSql(1) = "SELECT TOP 1 Val(Right(GlobalAcct,Len(GlobalAcct)-1)) As NumAct"
    aSql(2) = "FROM TestTable"
    aSql(3) = "WHERE Left(GlobalAcct,1)='" & sPrefix & "'"
    aSql(4) = "ORDER BY GlobalAcct DESC"

    Set rs = New ADODB.Recordset
    rs.Open Join(aSql, Space(1)), Application.CurrentProject.Connection

    GetLastAccount = rs.Fields("NumAct").Value

End Function

正在使用:

?getlastaccount("R")
 1003 
?getlastaccount("w")
 1002 

然后你可以加1或任何你想做的。

SQL 语句是 SELECT TOP 1ORDER BY DESC - 这就是您获得最大值的方式,您不必 return 或浏览巨大的记录集。

ValRight函数用于隔离账户的数字部分。有很多假设,包括帐户以您想要忽略的单个字符开头,其余字符是数字,并且您永远不会传入至少一条记录为 returned 的字符。但是你可以算出这些细节。