我有一个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等同物吗?
答案 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
的另一种选择
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