2017-06-06 25 views
0

初めてデータベースを構築したときに、遭遇した問題の解決策を共有したいと考えていました。アクセスレポートの画像への相対パス

私の問題は、レポート内の各レコードごとに異なるイメージを表示したいということでしたが、データベースを移動できるようにしたかったのです。これは問題でした。私はすべてのフォーラムで検索し、すべての異なるソリューションは動作しませんでした。私は、唯一の方法は、画像への完全なパスを保存するか、データベースに画像を保存することだというマイクロソフトの記事を発見しました。しかし、これは、データベースが移動された場合、またはデータベースにイメージを格納すると多くのストレージスペースを占める場合に問題を引き起こします。

問題は、コードがレポート内の各レコードに対して機能しないことです。コードはレポート全体用です。したがって、バックエンドとイメージフォルダを見つけるためのコードを書くと、そのレポートのすべてのレコードの最初のイメージがレポートに表示されます。

しかし、画像の名前をテーブルに保存するだけで、時にはそれがうまくいくことがわかりました(しかし、私はパスがないので持ってはいけません)が、データベースを再起動すると停止しますワーキング。さらに調査すると、ファイルブラウザを開くたびに、ある種のメモリにパスが保存されることがわかりました。画像へのパスがメモリに保存されている限り、画像をパスにリンクすることができます。

だから私のソリューションは、レポートにアクセスするところからフォームが、開かれると...

、ファイルブラウザが開かれ、画像へのパスが(バックエンドと画像フォルダを見つけるために、コードを使用して)に貼り付けられますブラウザが閉じられます。そしてこれは、パスを使って(テーブルに格納されている)イメージ名へのリンクを作成します。そして、それぞれの異なるイメージは、レポートの異なるレコードごとにショーになります。

かなり解決策ではありません。フォームが開くたびに、ファイルブラウザのフラッシュが表示されます。しかし、それは仕事を終わらせる。負荷フォームイベントで

`」これは、バックエンドと画像フォルダができます:あなたはのサブフォルダに画像を移動することができます

Dim filepath As String 
Dim strBackEndPath As String 
Dim lenPath As Integer 
Dim i As Integer 
Dim j As Integer 

strBackEndPath = CurrentDb.TableDefs("yourTabeInBackend").Connect 
j = InStrRev(strBackEndPath, "=") + 1 
strBackEndPath = Mid(strBackEndPath, j) 
BackPath = Left(strBackEndPath, InStrRev(strBackEndPath, "\")) 

filepath = BackPath & "YourImageFolder\" 

'this will open the folder browser and paste in the path and close it: 

Dim f As Object 
Set f = Application.FileDialog(msoFileDialogFolderPicker) 
Dim varFile As Variant 
Dim strPath As String 
Dim fileName As String 

With f 
.InitialFileName = (filepath) 
.AllowMultiSelect = False 
SendKeys "{ESC}", True 
f.Show 

For Each varFile In .SelectedItems 
Next varFile 
End With 

`

答えて

2

をデータベースのフォルダ。その後

このような画像の名前を保存します

Picture1.jpg 
Picture2.jpg 

など

アプリケーションを実行すると、画像へのパスを取得する:次に

PictureFolder = CurrentProject.Path & "\FolderName\" 

へのパス画像は次のようになります:

PictureFolder & Me!PictureFileName.Value 

データベースを「移動」するときは、データベースファイルとそのフォルダを、画像ファイルと共に移動します。

+0

これはフォームでも、レポートに1つのレコードがある場合でも機能します。しかし、レポート内の複数のレコードに対して異なるイメージを作成したい場合、それは機能しません(とにかく)。レポート内のすべてのレコードの最初のレコードのイメージがレポートに表示されます。 –

+0

はい、あなたは連続したフォームのために何かが必要ですが、確かにそのアイデアを得ることができます。 'UrlContent'関数のような現在のフォルダを含むパスを常に返すヘルパ関数を作成します。[here](https://www.experts-exchange.com/articles/29679/Show-pictures-directly-from-URLs- in-Access-forms-and-reports.html)を参照してください。別のオプションは、ネットワークサーバー上の共有フォルダに画像を保存することです。 – Gustav

関連する問題