我的访问数据库中有一个表,其中包含项目文件及其相关属性的索引。这些字段包括文件名,文件路径,创建日期,修改日期等等。
我想创建一些代码来遍历此表中的每条记录,并更新可能已更改的文件属性 - 特别是修改日期和文件大小。
该表是tblFileIndex,相关字段是File_Path,File_Size和Date_Modified。文件路径是文件的完整路径,包括文件名,所以在我看来应该很容易使用该字段来查找文件,然后更新文件大小和修改日期。
我不知道如何创建代码来循环遍历表并执行此操作。我希望将代码分配给我用于维护功能的表单上的按钮,因为这将作为维护例程的一部分半频繁运行。
下面是一些示例代码,但是当它到达记录集的末尾时,我从sFilePath = rs.Fields("File_Path")
获得了无效的Null错误使用。
Private Sub Command4_Click()
Dim rs As Recordset
Dim sFilePath As String
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
Set rs = CurrentDb.OpenRecordset("tblFileIndex")
Do While Not rs.EOF
sFilePath = rs.Fields("File_Path")
MsgBox sFilePath
rs.MoveNext
Loop
End Sub
看起来在我解决之后我需要添加以下内容:
.Edit
rs.Fields("File_Size") = oFS.GetFile(sFilePath).Size
.Update
.Edit
rs.Fields("Date_Modified") = oFS.GetFile(sFilePath).DateLastModified
.Update
rs.MoveNext
答案 0 :(得分:2)
好的,让我们清理一下:
Private Sub Command4_Click()
Dim rs As Recordset
Dim sFilePath As String
Dim oFS As Object
Set oFS = CreateObject("Scripting.FileSystemObject")
Set rs = CurrentDb.OpenRecordset("tblFileIndex")
with rs
.moveFirst
do
sFilePath = .Fields("File_Path")
.Edit
.Fields("File_Size") = oFS.GetFile(sFilePath).Size
.Fields("Date_Modified") = oFS.GetFile(sFilePath).DateLastModified
.Update
.moveNext
loop until .EOF
.Close ' Always close recordsets
end with
End Sub
获取/设置RecordSet
字段值的替代表示法:
' ...
with rs
.moveFirst
do
sFilePath = ![File_Path]
.edit
![File_Size] = oFS.GetFile(sFilePath).Size
' ...
.update
.moveNext
loop until .EOF
end with
' ...
end with
' ...
答案 1 :(得分:2)
当sFilePath = rs.Fields(“File_Path”)到达记录集的末尾时,我得到Null错误的无效使用。
由于您的循环由Do While Not rs.EOF
控制,因此该错误表明您在 File_Path 中有一行Null。
当您仅使用 File_Path 不为空的行加载记录集时,查看该错误是否消失。
Dim strSelect As String
strSelect = "SELECT * FROM tblFileIndex WHERE File_Path Is Not Null;"
Set rs = CurrentDb.OpenRecordset(strSelect)