我有一个使用VBA代码的数据库应用程序,该代码已达到2GB大小限制,并且每个记录都有图像附件。我们希望让应用程序中的所有表单远离“上传”图像作为记录的附件,而是将它们上传到网络服务器上的目录并引用表单中的图像文件。
此时,我正试图找出解决这个问题的最佳方法。让用户以某种方式通过Access表单拉出“上传”对话框是否可行?我在VBA中为Open File对话框尝试了几个拼凑在一起的解决方案,但它们从来没有完全正常工作。
摘要:文件类型为“.ACCDB”,我需要允许用户以新记录创建表单上传图像,将图像存储在网络目录中,并在整个应用程序中即时访问。
提前致谢。
答案 0 :(得分:0)
从一般数据库的角度来看,您不应将图像直接存储在数据库中,除非它们非常小(大约小于1 MB),并且您实际上有足够的空间来存储它们。最常见的做法是将图像路径存储在数据库中,然后直接从需要时存储图像的文件目录中加载这些图像。它会增加另一层次的复杂性,但会从根本上减少你的数据库大小。
<强>更新强>
此代码允许用户单击表单中的某个元素框架,将路径存储在DB中(路径为username.jpg),然后在单击的框架中将图片显示给用户:
Private Sub SignatureFrame_Click()
On Error GoTo ErrorHandler
' Get path for the new picture from a dialog box
Dim Path As String
Dim fd As FileDialog
Dim ffs As FileDialogFilters
Set fd = Application.FileDialog(msoFileDialogOpen)
With fd
Set ffs = .Filters
With ffs
.Clear
.Add "Pictures", "*.jpg"
End With
.AllowMultiSelect = False
If .Show = False Then Exit Sub
Path = .SelectedItems(1)
End With
' Update the picture in the user interface
Me![SignatureFrame_Click].Picture = Path
' Copy the signature into the local Signature folder of the DB
Dim fs As Object
Dim oldPath As String, newPath As String, file As String
oldPath = Path 'Full path the file is located in
newPath = CurrentProject.Path & "\Signatures\Users\" & Screen.ActiveForm.UserName & ".jpg" 'Folder and path to copy file to
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFile oldPath, newPath 'This file was an .jpg file
Set fs = Nothing
' Set the new picture path for the form
Screen.ActiveForm.SignaturePath = newPath
Exit Sub
ErrorHandler:
MsgBox "Could not upload the image. Please check that the file format is of type jpg."
Resume Next
End Sub
然后在某个其他形式的某个稍后点,你可以像这样检索图像:
Me!SignatureFrame.Picture = CurrentProject.Path & "\Signatures\username.jpg"
PS:代码已在SO编辑器中翻译过,所以我不能保证没有错误。
希望有所帮助!