0

VBA コードを使用するデータベース アプリケーションがあり、レコードごとに画像を添付すると 2GB のサイズ制限に達しました。アプリケーション内のすべてのフォームを、レコードの添付ファイルとして画像を「アップロード」するのではなく、ネットワーク サーバー上のディレクトリにアップロードして、フォーム内の画像ファイルを参照するようにしたいと考えています。

この時点で、私はこれにアプローチする最善の方法を見つけようとしています。Access フォームからユーザーに「アップロード」ダイアログを表示させることは可能ですか? 私は、VBA の [ファイルを開く] ダイアログに対していくつかの石畳のソリューションを試しましたが、それらはまったく適切に機能しませんでした。

概要: ファイルの種類は「.ACCDB」です。ユーザーが新しいレコード作成フォームで画像をアップロードし、画像をネットワーク ディレクトリに保存し、アプリケーション全体でオンザフライでアクセスできるようにする必要があります。

前もって感謝します。

4

1 に答える 1

0

一般的なデータベースの観点からは、画像が非常に小さく (約 1 MB 未満)、実際に画像を保存するスペースがある場合を除き、画像をデータベースに直接保存しないでください。最も一般的な方法は、イメージパスをデータベースに保存し、必要に応じてイメージが保存されているファイル ディレクトリからそれらのイメージを直接ロードすることです。別のレベルの複雑さが追加されますが、DB のサイズが大幅に削減されます。

アップデート:

このコードにより、ユーザーはフォーム内のいくつかの要素フレームをクリックし、パスを 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 エディターで翻訳されているため、間違いがないことは保証できません。

それが役立つことを願っています!

于 2013-09-09T17:44:50.737 に答える