外部图像参考ACCDB

时间:2013-09-09 17:39:07

标签: image vba upload external

我有一个使用VBA代码的数据库应用程序,该代码已达到2GB大小限制,并且每个记录都有图像附件。我们希望让应用程序中的所有表单远离“上传”图像作为记录的附件,而是将它们上传到网络服务器上的目录并引用表单中的图像文件。

此时,我正试图找出解决这个问题的最佳方法。让用户以某种方式通过Access表单拉出“上传”对话框是否可行?我在VBA中为Open File对话框尝试了几个拼凑在一起的解决方案,但它们从来没有完全正常工作。

摘要:文件类型为“.ACCDB”,我需要允许用户以新记录创建表单上传图像,将图像存储在网络目录中,并在整个应用程序中即时访问。

提前致谢。

1 个答案:

答案 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编辑器中翻译过,所以我不能保证没有错误。

希望有所帮助!