- 締切済み
Access2000で画像管理がしたい
OSはWinXPでACCESS2000という環境です。 画像管理をしたいと考えています。 具体的には、フォームに作成したコマンドボタンをクリックすると、 ファイルを選択する画面が表示されて、そこで指定した画像が イメージコントロール内に挿入されるというイメージで画像管理 できたらと考えています。 その時、指定した画像はテーブルにも画像名のみがレコードとして 保存されるようにしたいです。また挿入した画像は指定フォルダに 自動で保存(コピー?)されてフォームに表示される画像はこの指定 フォルダからリンクで表示される形をイメージしています。 更にフォームに表示される画像をクリックすると拡大して閲覧できる ようにもしたいと思っています。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=402425 のページも参考にさせて頂いたのですが、イベントでフルパスを設定する 為の式がうまく設定できないので結局、イメージしていることが行えず 悩んでいます。 画像をOELオブジェクトにすると容量が重くなりますし、画像名でレコード 管理ができないので避けたいのですが、上記イメージを実現する為に よい方法があれば教えて下さい。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 ファイルを選択→イメージコントロールに表示→テーブルに保存 という流れでしょうか。 ファイル選択は、おそらくコモンダイアログコントロールを使用していると思います。 そこで選択ファイルのフルパスを指定出来るので、イメージコントロールのPictureプロパティに、 Me!Image1.Picture = ファイルのフルパス のようにすれば表示します。(実際はフルパスは変数に格納するでしょうが) テーブルへの保存ですが、コモンダイアログの選択でファイル名のみも取得出来るので、それを保存すればいいでしょう。 また、フルパスからファイル名のみを取り出す(一番後ろの"\"の位置を探して、それより後ろを取り出す)のもいいでしょう。 指定フォルダへのコピーは、FileCopyメソッドを使用して、 FileCopy 元のファイルのフルパス, コピー先のファイルのフルパス のようにします。 あと、拡大閲覧は、閲覧用のフォームに大きなイメージコントロールを貼り付けて、そのフォームを開くなどの方法があります。
補足
ご回答ありがとうございます。返答が遅くなって申し訳ありません。ご回答をヒントに色々と試してみたのですが、データベース設計は素人なのでなかなか思うように作成できませんでした。 >ファイルを選択→イメージコントロールに表示→テーブルに保存 という流れでしょうか。 流れは↑このとおりです。テーブルに保存するのは画像のファイル名のみに したいと思います。そのほうが指定フォルダ内にコピーされた画像をフォーム上に表示させることができるような気がしたので・・・ コモンダイアログコントロールの設定は色々調べてActiveXコントロールから行うということを知ったのですが、この設定はVBがインストールされていなければ使用できませんでした。できればVBを使用しない方法をとりたいと思いモジュールで画像挿入できるようにしてみました。これだとデータベースにはフルパスで保存されてしまうので、指定したフォルダ内のファイルから画像を表示させることができず、いきづまっています。 設定したモジュールはこんな感じです。 ファイル名を抜きだすにはどうしたらよいでしょうか? あと、イメージに近いデータベースがこちらのサイトにあります。 http://www.ark-9.com/~bluemiffy/read/trb.html 素人の私でもDB完成ができるよう、アドバイス宜しくお願いします。 Option Compare Database Option Explicit Declare Function GetOpenFileName Lib "COMDLG32.DLL" Alias _ "GetOpenFileNameA" (pOpenfilename As OpenFileName) As Boolean Type OpenFileName lStructSize As Long hwndOwner As Long hInstance As Long lpstrFilter As String lpstrCustomFilter As String nMaxCustFilter As Long nFilterIndex As Long lpstrFile As String nMaxFile As Long lpstrFileTitle As String nMaxFileTitle As Long lpstrInitialDir As String lpstrTitle As String Flags As Long nFileOffset As Integer nFileExtension As Integer lpstrDefExt As String lCustData As Long lpfnHook As Long lpTemplateName As String End Type Public Function API_OpenFileName() As String Dim OF As OpenFileName Dim tmp As String Dim stu As Long Dim filter As String tmp = String$(5120, Chr$(0)) filter = "全てのファイル(*.*)" + Chr$(0) + "*.*" + Chr$(0) + Chr$(0) With OF .lStructSize = Len(OF) .hwndOwner = Application.hWndAccessApp .lpstrFile = tmp .nMaxFile = 5120 .lpstrFilter = filter .nFilterIndex = 1 .Flags = &H4 .lpstrTitle = "ファイルを指定してください" End With stu = GetOpenFileName(OF) If stu Then API_OpenFileName = Left$(OF.lpstrFile, InStr(OF.lpstrFile, Chr$(0)) - 1) End If End Function