我为某些人创建了一个表单,用于在访问表中添加/修改记录。我需要做的是编写一个函数,在用户添加新记录时自动从列中查找下一个可用的数字。
我遇到的问题是我需要增加的列中的数字前面有R或W,所以我不能只使用DMax函数。我正在写一个输入框来询问第一个字符然后我需要它来搜索最大的数字然后给它们下一个可用的字符。
例如,该列包含:
R1000
R1001
W1000
R1002
W1001
W1002
R1003
当用户指定" R"我需要它返回" 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
答案 0 :(得分:3)
这是一个函数,它将返回一个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 1
,ORDER BY DESC
- 这就是你获得最大值的方式,你不必返回或浏览庞大的记录集。
Val
和Right
函数用于隔离帐户的数字部分。有很多假设,包括帐户以您想要忽略的单个字符开头,其余字符是数字,并且您永远不会传入至少返回一条记录的字符。但你可以弄清楚这些细节。