Sql server 如何使用ms access 2007打开存储在sql server[图像]字段中的PDF
我正在将数据库从access转换为sql后端access前端。数据库中嵌入了pdf文档,这些文档最终通过SQL server的数据导入工具存储为[图像]数据 我的问题是,我希望用户能够通过单击access中创建的报表中的pdf图标来打开pdf文件 这可以用VBA来完成,还是有更简单的方法?我完全不知道如何才能做到这一点 谢谢你的回答 我编辑了BlobToFile函数以去掉ole头,因为adobe无法读取文件evice可以读取,mac preview也可以读取 我可以像这样做我想要的:Sql server 如何使用ms access 2007打开存储在sql server[图像]字段中的PDF,sql-server,ms-access,vba,Sql Server,Ms Access,Vba,我正在将数据库从access转换为sql后端access前端。数据库中嵌入了pdf文档,这些文档最终通过SQL server的数据导入工具存储为[图像]数据 我的问题是,我希望用户能够通过单击access中创建的报表中的pdf图标来打开pdf文件 这可以用VBA来完成,还是有更简单的方法?我完全不知道如何才能做到这一点 谢谢你的回答 我编辑了BlobToFile函数以去掉ole头,因为adobe无法读取文件evice可以读取,mac preview也可以读取 我可以像这样做我想要的: Priv
Private Sub PDFDocument_Click()
Call BlobToFile("C:\db\MyPDFFile.pdf", Me.PDFDocument)
If Dir("C:\db\MyPDFFile.pdf") <> "" Then
FollowHyperlink ("C:\db\MyPDFFile.pdf")
End If
End Sub
'Function: BlobToFile - Extracts the data in a binary field to a disk file.
'Parameter: strFile - Full path and filename of the destination file.
'Parameter: Field - The field containing the blob.
'Return: The length of the data extracted.
Public Function BlobToFile(strFile As String, ByRef Field As Object) As Long
On Error GoTo BlobToFileError
Dim nFileNum As Integer
Dim abytData() As Byte
Dim abytParsedData() As Byte
Dim copyOn As Boolean
Dim copyIndex As Long
BlobToFile = 0
nFileNum = FreeFile
copyOn = False
copyIndex = 0
Open strFile For Binary Access Write As nFileNum
abytData = Field
ReDim abytParsedData(UBound(abytData))
For i = LBound(abytData) To UBound(abytData) - 1
If copyOn = False Then
If Chr(abytData(i)) = "%" And Chr(abytData(i + 1)) = "P" And Chr(abytData(i + 2)) = "D" And Chr(abytData(i + 3)) = "F" Then
copyOn = True
End If
End If
If copyOn = True Then
abytParsedData(copyIndex) = abytData(i)
copyIndex = copyIndex + 1
End If
Next
Put #nFileNum, , abytParsedData
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
如果我理解您的意图,您基本上希望Adobe Reader打开内存中的pdf文件对象。这是不可能的。您需要将pdf文件写入系统硬盘,然后从那里打开它。通过使用computers Temp文件夹或自己管理文件/文件夹,您可以在某种程度上实现您的要求。例如,您可以在每次打开应用程序时清理PDF文件文件夹 这里有一些代码可以帮助你完成你想做的事情。这段代码与创建文件夹、生成文件名、检查文件是否已经存在等无关。我假设您能够处理这些。Command1_Click中的我的代码假定您正在使用SQL Server和ODBC链接表 我在这里使用了FollowHyperlink,但我强烈建议您使用它来打开文件。您可能会在FollowHyperlink中出现安全错误
Private Sub Command1_Click()
Dim r As DAO.Recordset, sSQL As String
sSQL = "SELECT ID, BlobField FROM MyTable"
Set r = CurrentDb.OpenRecordset(sSQL, dbOpenDynaset, dbSeeChanges)
If Not (r.EOF And r.BOF) Then
Call BlobToFile("C:\MyPDFFile.pdf", r("BlobField"))
If Dir("C:\MyPDFFile.pdf") <> "" Then
FollowHyperlink("C:\MyPDFFile.pdf")
End If
End If
r.Close
Set r = Nothing
End Sub
'Function: BlobToFile - Extracts the data in a binary field to a disk file.
'Parameter: strFile - Full path and filename of the destination file.
'Parameter: Field - The field containing the blob.
'Return: The length of the data extracted.
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
重复的问题是StackOverflow的一大禁忌。这不是一个传统的论坛。我建议你删除你的另一个问题: