从访问附件获取文件名

时间:2018-12-10 15:39:23

标签: vba ms-access filenames attachment ms-access-2013

我在访问中运行了一些VBA。其目的是输出管道定界的字符串,以提供现有表的导出/备份。它运行良好,但是我想添加另一个功能。可以针对其中一个表运行包含附件,我希望附件文件名显示在“ attachment”字段下。目前,代码只是在其中贴上警告,但我想要更相关的内容。

该代码当前读取指定表中的每个字段名称,并用竖线(|)对其进行分割。然后转到新行,并使用每个字段中的值重复该过程。相关代码如下:

Set rs = CurrentDb.OpenRecordset(Table, dbOpenSnapshot)
rs.Filter = srchString
Set rsFilt = rs.OpenRecordset()
fieldCount = rsFilt.Fields.Count
recordTot = rsFilt.RecordCount

If recordTot <> 0 Then

    rsFilt.MoveFirst

    Dim o As Integer

    For o = 0 To fieldCount - 1
        fieldNames = fieldNames & rsFilt.Fields(o).Name & "|"
    Next o


    Do While rsFilt.EOF = False
        For o = 0 To fieldCount - 1
            If rsFilt.Fields(o).Type <> 101 Then
                oldDataSet = oldDataSet & Nz(rsFilt.Fields(o).Value, "") & "|"
            Else
                oldDataSet = oldDataSet & "attached files not saved in logs" & "|"
            End If
        Next o
        oldDataSet = oldDataSet & vbNewLine
        rsFilt.MoveNext

    Loop
Else

    fieldNames = "No " & Table & " for this member."

End If

createRecordSnapshot = fieldNames & vbNewLine & oldDataSet

End Function

每个记录仅具有一个与其关联的附件。我想以某种方式将文件名作为字符串提取。

非常感谢,

1 个答案:

答案 0 :(得分:0)

据我所知,访问此信息的唯一方法是通过表单上的Attachment控件。您可以使用此控件创建一个简单的表单,将其作为代码的一部分加载并在循环中访问它。

这是一个以某种形式循环遍历记录并读取filename控件的Attachment属性的示例:

Dim frm As Form
Dim ctl As Attachment
Dim i As Long, j As Long

Set frm = Application.Forms("Form1")
Set ctl = frm.Controls("test") 'An Attachment control
frm.RecordsetClone.MoveLast
i = frm.Recordset.RecordCount
For j = 0 To i - 1
    Debug.Print ctl.FileName
    DoCmd.GoToRecord acDataForm, frm.Name, acNext
Next