【发布时间】:2019-07-25 08:10:56
【问题描述】:
我正在处理一个包含 150 万条记录的表,我想将小于当前日期的日期更改为当前日期,并用当前日期填充空白字段。
我在一个小例子上尝试了我的代码,它可以工作,但是当我在实际表上运行时,它会出现错误“超出文件共享锁定计数”
由于我是访问 vba 的新手,所以我的代码非常基本 n 拖沓,所以我不确定问题是否是由此引起的。
我想使用 if 或缩短我的代码,但是当我使用 If (IsNull(rs.Fields(12))) 或 (CDate(rs.Fields(12))
它会显示 null 的无效使用。
Sub fillcurrentdate()
Dim db As DAO.Database
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("Final", dbOpenDynaset, dbSeeChanges)
Dim currDateTime As Date
currDateTime = Date
rs.MoveFirst
Do While Not rs.EOF
If IsNull(rs.Fields(4)) Then
rs.Edit
rs.Fields(4) = currDateTime
rs.Update
ElseIf CDate(rs.Fields(4)) < currDateTime Then
rs.Edit
rs.Fields(4) = currDateTime
rs.Update
End If
If IsNull(rs.Fields(11)) Then
rs.Edit
rs.Fields(11) = currDateTime
rs.Update
ElseIf CDate(rs.Fields(11)) < currDateTime Then
rs.Edit
rs.Fields(11) = currDateTime
rs.Update
End If
If IsNull(rs.Fields(12)) Then
rs.Edit
rs.Fields(12) = currDateTime
rs.Update
ElseIf CDate(rs.Fields(12)) < currDateTime Then
rs.Edit
rs.Fields(12) = currDateTime
rs.Update
End If
If IsNull(rs.Fields(13)) Then
rs.Edit
rs.Fields(13) = currDateTime
rs.Update
ElseIf CDate(rs.Fields(13)) < currDateTime Then
rs.Edit
rs.Fields(13) = currDateTime
rs.Update
End If
If IsNull(rs.Fields(15)) Then
rs.Edit
rs.Fields(15) = currDateTime
rs.Update
ElseIf CDate(rs.Fields(15)) < currDateTime Then
rs.Edit
rs.Fields(15) = currDateTime
rs.Update
End If
rs.MoveNext
Loop
End Sub
如果有人能就此提出建议,我将不胜感激。
【问题讨论】:
-
在网上搜索错误消息(复制/粘贴),这应该会有所帮助;)
-
您不想通过循环遍历表格来执行此操作。相反,您想使用 SQL 或查询来执行此操作。您可以从代码或宏运行。创建 > 查询设计 - 选择您的表 > 更新(查询类型)。