Microsoft Access中的LOAD_FILE?

时间:2015-01-19 02:10:28

标签: vba ms-access access-vba

我有一个Microsoft Access数据库,可以将图像嵌入到表中的字段中。这超出了我的控制范围,因为它是第三方产品,需要以这种方式存储图像。

过去(仅仅因为我掌握了知识和工具),我使用了Access - > MySQL - >访问ODBC驱动程序以将数据导出到MySQL,使用带有UPDATE函数的LOAD_FILE语句嵌入照片,然后导出回Access,第三​​方程序很乐意看到图像。

今天我决定通过编写一个接受文件名文本文件的VBA宏来简化这个过程,并执行将文件加载到数据库所需的SQL。

问题是,Access似乎没有LOAD_FILE的概念,因为运行这个SQL:

UPDATE myTable SET PhotoField=LOAD_FILE('C:\\MyFiles\\SMITJOH.jpg') WHERE TextField3='SMITJOH';

通知我LOAD_FILE是一个未定义的函数。

我使用DoCmd.RunSQL执行上面提到的SQL行。我应该看一下微软的LOAD_FILE等同物吗?

1 个答案:

答案 0 :(得分:0)

有效的SQL没有任何函数LOAD_FILE,可能是其他控件或类似函数的外部函数。
因此,您可以直接在二进制字段(BLOB)上使用流图像执行此操作 检查Microsoft包含的示例代码({3}}中的VB.Net或C#(根据评论)

    


    Public Shared Function GetPhoto(filePath As String) As Byte()
      Dim stream As FileStream = new FileStream( _
      filePath, FileMode.Open, FileAccess.Read)
      Dim reader As BinaryReader = new BinaryReader(stream)
      Dim photo() As Byte = reader.ReadBytes(stream.Length)
      reader.Close()
      stream.Close()
      Return photo
    End Function
    

您可以阅读此函数,读取二进制映像以加载到内存,然后流入任何BinaryField
对于VBa,这是读取或写入字段BLOB

的另一种选择
Public Function FileToBlob(strFile As String, ByRef Field As Object)
On Error GoTo FileToBlobError

If Len(Dir(strFile)) > 0 Then
    Dim nFileNum As Integer
    Dim byteData() As Byte

    nFileNum = FreeFile()
    Open strFile For Binary Access Read As nFileNum
    If LOF(nFileNum) > 0 Then
        ReDim byteData(1 To LOF(nFileNum))
        Get #nFileNum, , byteData
        Field = byteData
    End If
Else
    MsgBox "Error: File not found", vbCritical, _
           "Error reading file in FileToBlob"
End If

FileToBlobExit:
   If nFileNum > 0 Then Close nFileNum
   Exit Function

FileToBlobError:
   MsgBox "Error " & err.Number & ": " & err.Description, vbCritical, _
       "Error reading file in FileToBlob"
   Resume FileToBlobExit
End Function


Public Function BlobToFile(strFile As String, ByRef Field As Object) As Long
On Error GoTo BlobToFileError

Dim nFileNum As Integer
Dim abytData() As Byte
BlobToFile = 0
nFileNum = FreeFile
Open strFile For Binary Access Write As nFileNum
abytData = Field
Put #nFileNum, , abytData
BlobToFile = LOF(nFileNum)

BlobToFileExit:
   If nFileNum > 0 Then Close nFileNum
   Exit Function

BlobToFileError:
   MsgBox "Error " & err.Number & ": " & err.Description, vbCritical, _
       "Error writing file in BlobToFile"
   BlobToFile = 0
   Resume BlobToFileExit

End Function