【发布时间】:2020-09-30 15:44:09
【问题描述】:
我正在尝试通过 Excel 用户表单将我的数据库中的档案 ID 分配给相应的文件编号列。它应该在列中找到最大的字母数字字符串,并将其递增 1 并在归档 id 列中分配它。 这是 VBA 代码:
Sub Archival()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.AutomationSecurity = msoAutomationSecurityLow
Dim cnn As New ADODB.Connection 'dim the ADO collection class
Dim rst As New ADODB.Recordset 'dim the ADO recordset class
Dim dbPath As String
Dim qry As String
Dim qry2 As String
dbPath = "\\share.company.net@SSL\DavWWWRoot\sites\FileNumberandLDS\Shared Documents\General\NewDB.accdb"
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Jet OLEDB:Database"
Set rst = New ADODB.Recordset 'assign memory to the recordset
Set rs = New ADODB.Recordset
qry = "SELECT * FROM FileNumbers WHERE [File_Number]= '" & ArchivalForm.txtFile.Value & "'"
rst.Open qry, cnn, adOpenKeyset, adLockOptimistic
If ArchivalForm.cmbRetention.Value = "A" Then
qry2 = "SELECT max(val(mid(Archival_id,3))) FROM FileNumbers WHERE [Archival_id] ALIKE 'A%'"
rs.Open qry2, cnn, adOpenKeyset, adLockOptimistic
newfile = "A-" & (rs.Fields(0) + 1)
End If
If ArchivalForm.cmbRetention.Value = "C" Then
qry2 = "SELECT max(val(mid(Archival_id,3))) FROM FileNumbers WHERE [Archival_id] ALIKE 'C%'"
rs.Open qry2, cnn, adOpenKeyset, adLockOptimistic
newfile = "C-" & (rs.Fields(0) + 1)
End If
With rst
.Fields("Archival_id").Value = newfile
.Fields("Remarks").Value = ArchivalForm.txtRemarks.Value
.Fields("Retention Category").Value = ArchivalForm.cmbRetention.Value
.Fields("Archived By").Value = Application.UserName
.Fields("Archived On").Value = Date
.Update
End With
'cnn.Execute "INSERT INTO TheTable.....", , adCmdText + adExecuteNoRecords
'Set rs = cnn.Execute("SELECT @@Identity", , adCmdText)
rst.Close
rs.Close
cnn.Close
Set rs = Nothing
Set rst = Nothing
Set cnn = Nothing
MsgBox ("The Archival id is " & newfile)
End Sub
我收到错误“没有为一个或多个要求提供值”:
rs.Open qry2, cnn, adOpenKeyset, adLockOptimistic
这是我的数据库的样子: [![在此处输入图片描述][1]][1]
【问题讨论】:
-
试试:
LIKE 'A*',LIKE 'C*'。 -
没有改变,显示同样的错误
-
连接有效吗?您是否能够在没有过滤条件的情况下打开记录集?如果没有符合条件的记录并尝试生成第一个 Archive_ID,会发生什么情况?
-
将前缀和序列保存在单独的字段中,生成序列的代码将被简化。你一步调试了吗?是否从记录集中提取值?
-
连接有效,我对项目中的多个其他事物使用相同的连接代码,一切正常