Microsoft Access Club >SampleFile Q & A >インデックス >このページ >次頁 < 前項  サイト内検索


Q&A-008 ネットワークで参考ファイルNo63及びNo200のAccessファイルを使用する一例



Access Club 超初心者 BBS
タイトル : 写真つきフォーム:画像がみあたりません。と出てしまいます。
記事No : 6580
投稿日 : 2003/04/16(Wed) 18:54
投稿者 : あや

OS:ME
Access Version:2000

アクセス初心者の私もこのサイトのおかげで、なんとかアクセスDBを構築できつつあります。
ところが、今問題が発生してしまい、解決方法がどうしてもわかりません。
どうぞ、どなたかご教授下さい。

「SampleFile63:写真つきフォームの作成」のプロシージャーをそのまま自分のフォームのコードビルダに貼り付けました。
ネットワーク上で共通ドライブのフォルダで利用する為、写真画像は、同じネットワーク上の共通ドライブの中に保存しました。
ところが、サーバでは写真画像を見ることができるのですが、クライアントからは見ることが出来ないと言う問題が生じました。
そこで、サーバのmbd、C:\xxx\xxx.mdb という形から、\\Server\xxx\xxx.mdb という形に変えたところ、無事サーバ・クライアントともに見ることが出来ました。

しかし、今現在、フォームから写真画像を開くと、「C:\xxx\xxxは見当たりません。」と出てしまいます。
Cドライブの中の画像の一つの画像を探し、見当たらない、探せないとofficeアシスタントが表示され、「OK」をおすと、フォームが開きます。
パス名、Cドライブのものは \\Serverに変えたので、もちろん存在ません。

その後は、\\Server\xxx\xxx.mdbから無事に画像を持ってきてくれるようで、なんとか動いている状態です。
ネットワーク上で、閲覧用としてこのDBを使用したいために、セキュリティー強化の為、MDEファイルを作成しようと思ったのですが、「C:\xxx\xxx…は見当たりません。」「MDEファイルは作成できませんでした」と出てしまい、失敗に終わってしまいます。
この、「C:\xxx\xxx…は見当たりません。」の表示をなくし、検索しないようにしたいのですが、(このためにMDEファイルができないのではないかと思うのです。)どのようにどこをいじるといいのでしょうか?
VBAをみるとわかるのだと思うのですが、見方がわからず、困っている状態です。
なんとかこの「検索が見当たらない」という表示がきいてこないよう、すぐに\\Server\xxx…に接続されるよう変えたいのです。

現在、

1.サーバーとクライアントに同じデーターベースを置く
2.クライアント側の.mdb のテーブルを全て削除
3.クライアント側の.mdb を開き、サーバ側のテーブルをリンクさせる
  ファイル-外部データの取り込み-テーブルのリンク

の方法で、サーバーとクライアントに分けていますが、クライアントも同じように、「検索が見当たらない」と表示されてしまいます。
 


>この、「C:\xxx\xxx…は見当たりません。」の表示をなくし、検索しないようにしたいのですが、

ネットワークドライブ対応が求められていますね。参考ファイルNo63の発展型(相対パス)がNo200にございますので、そのサンプルファイルを使用して対応を考えましょう。

これを実現するためには、ネットワーク上にある画像のパス(位置)をファイル元とファイル先とで異なる記述が必要となります。No63のパスは固定でした。No200は相対パスでも表示を可能にしましたので、割とフレキシブルに対応が可能になっていますが、ご質問のようにAccessファイルを分割にすることは想定していません。

ファイル元(テーブルだけを備えたAccessファイル)とファイル先(テーブル以外のオブジェクトを備えたAccessファイル、ファイル先のテーブルとリンクを行う)の二つのAccessファイルと画像が格納されているAccessClubフォルダーが、サンプルファイルに圧縮保管されていますので、解凍して下さい。

 

■ファイル元Accessファイル

テーブル以外のオブジェクトを削除しています。このファイルはこの作業だけでOKです。

 

■ファイル先Accessファイル

テーブルだけを削除しています。そして、メニューバーの「ツール」にある「オプション」から表示欄の"システムオブジェクト"にチェックをして下さい。これで、テーブル欄は下記のようになります。

 

 

これらのテーブルはシステム上、自動的に作成、更新されるものです。通常は非表示なので、見るのが初めての方もいらっしゃるでしょうね。

次に、テーブルをファイル元ファイルにあるテーブルとリンクして下さい。一応、画像ホルダーはファイル元ファイルと同じフォルダーにあるものとします。

そして、MsysObjectsテーブルを開いていただけますか?

 

 

これでファイル元ファイルまでのパスが判明しました。このパスを取り出すために、「MsysObjects」テーブルを基にしたクエリを作成します。そして、DlookUp関数を用いて(VBA内で)パスの原型を取得する手筈です。

*複数のリンク設定がある場合等は、クエリの抽出設定を適切なものにして下さい。

 

 

次に、下記のプロシージャをモジュールに記述して下さい。

 

Option Compare Database
Option Explicit

Dim varfolder As Variant

Function FilePass()

    Dim strPass As String
    Dim strdir As String
    
    '画像フォルダーを指定します。
    'ファイル元ファイルと同じフォルダーに存在するものと仮定しています。
    varfolde = "AccessClub"
    
    '例.strPass = C:\Documents and Settings\***\デスクトップ\sampleexe_200.mdb
    strPass = DLookup("Database", "qry_MSysObjects")
    
    '例.strdir = C:\Documents and Settings\***\デスクトップ\
    strdir = Left(strPass, InStrRev(strPass, "\"))

    FilePass = strdir & varfolder & "\"

End Function

 

画像を表示させるフォームの「レコード移動時イベント」に下記プロシージャを記述して完了です。

 

Private Sub Form_Current()

On Error GoTo Form_Current_Err

    Me.ラベル.Visible = False

    If Not IsNull(Me.パス) Then
        Me.OLEイメージ.Picture = Me.txtパス
    Else
        Me.OLEイメージ.Picture = ""
    End If
    
Exit Sub

Form_Current_Err:

    If Err.Number = 2220 Then
        Me.OLEイメージ.Picture = ""
        Me.ラベル.Visible = True
    Else
        MsgBox "予期せぬエラーが発生しました。" & vbNewLine & _
                Err.Number & vbNewLine & _
                Err.Description, 16, "管理者"
    End If
    
    Resume Next

End Sub

 

 

 

2003/04/17


Q&A-008 ネットワークで参考ファイルNo63及びNo200のAccessファイルを使用する一例


 

-Microsoft Access Club-