0

背景信息: 我对 VBA 或 Access 不是很了解,但是我有一个 VBA 脚本,可以在用户计算机上创建一个文件(具体来说是一个 KML,但这对我的问题来说并不重要)和使用链接到数据库中记录的变量写入它。像这样:

Dim MyDB As Database
Dim MyRS As Recordset
Dim QryOrTblDef As String
Dim TestFile As Integer

    QryOrTblDef = "Table1" 
    Set MyDB = CurrentDb
    Set MyRS = MyDB.OpenRecordset(QryOrTblDef)
    TestFile = FreeFile

    Open "C:\Testing.txt"
    Print #TestFile, "Generic Stuff"
    Print #TestFile, MyRS.Fields(0)

等等

我的情况: 我有一个非常大的字符串(一个包含大量多边形顶点坐标的文本文档),我想将它添加到要打印到另一个文件(KML 文件,如上例中)的变量中。我希望将此包含坐标的文本文件作为附件数据类型添加到 Access 数据库中,并将其内容复制到要在上述脚本中使用的变量中。

我的问题: 有没有一种方法可以访问附加文本文件(作为 MS Access 数据库字段中的附件数据类型附加)中的数据并将其复制到变量中,以便我可以在 VBA 脚本中使用它?

我发现了什么: 我无法找到关于这个主题的信息我认为主要是因为我不知道要搜索什么关键字,但我能够在论坛上找到某人的代码,“ozgrid”,这似乎接近我想做的事。尽管它只是从磁盘上的文本文件中提取,而不是从附加到数据库的文本文件中提取。

来自上述论坛的代码创建了一个访问文本文件中数据的函数:

Sub Test() 

    Dim strText As String 

    strText = GetFileContent("C:\temp\x.txt") 
    MsgBox strText 

End Sub 

Function GetFileContent(Name As String) As String 
    Dim intUnit As Integer 

    On Error Goto ErrGetFileContent 
    intUnit = FreeFile 
    Open Name For Input As intUnit 
    GetFileContent = Input(LOF(intUnit), intUnit) 
ErrGetFileContent: 
    Close intUnit 
    Exit Function 
End Function 

任何帮助在这里表示赞赏。谢谢。

4

1 回答 1

1

如果您存储纯文本,甚至存储有组织的文本的表格,为什么备忘录数据类型不适合,我有点困惑。话虽如此,一种方法是输出到磁盘并读入字符串。

''Ref: Windows Script Host Object Model
Dim fs As New FileSystemObject
Dim ts As TextStream
Dim rs As DAO.Recordset, rsA As DAO.Recordset
Dim sFilePath As String
Dim sFileText As String

    sFilePath = "z:\docs\"

    Set rs = CurrentDb.OpenRecordset("maintable")
    Set rsA = rs.Fields("aAttachment").Value

    ''File exists
    If Not fs.FileExists(sFilePath & rsA.Fields("FileName").Value) Then
        ''It will save with the existing FileName, but you can assign a new name
        rsA.Fields("FileData").SaveToFile sFilePath
    End If

    Set ts = fs.OpenTextFile(sFilePath _
           & rsA.Fields("FileName").Value, ForReading)

    sFileText = ts.ReadAll

另请参阅:http: //msdn.microsoft.com/en-us/library/office/ff835669.aspx

于 2013-01-09T12:59:18.097 回答