VBA更新文件属性

时间:2014-11-13 16:23:40

标签: vba ms-access access-vba

我的访问数据库中有一个表,其中包含项目文件及其相关属性的索引。这些字段包括文件名,文件路径,创建日期,修改日期等等。

我想创建一些代码来遍历此表中的每条记录,并更新可能已更改的文件属性 - 特别是修改日期和文件大小。

该表是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

2 个答案:

答案 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)