« VBAの参照設定 | トップページ | いたずらパンク »

2013年5月10日 (金)

Public指定の変数の怖さ

まだ作成途上ですが、自転車店統合システムを使って見たいとのお申し出があり、最新版をアップしようとして、四苦八苦してしまいました。

 
WEBに置いているマスターデータは、当然ですが、サンプルとして書き込んだデータ以外は、全てブランクです。
 
しばらく更新していなかったため、いろんなテーブルを追加しており、バージョンアップ時に、必要に応じて、テーブルの追加、修正をするVBAコードを作っています。
 
テーブルの追加について、不具合を見つけていたので、丁度その部分を修正中でした。
 
インストール時には、操作用のMDBとマスターデータのMDBが同一ディレクトリに置かれるようにしていますが、データ保全を考えると、バックアップデータとマスターのMDBは同じドライブに置きたくありません。
 
どちらのデータも任意の場所に置けるように作りましたが、バージョンアップ時には、リンク元のMDBのパスを取得する必要があり、今回、そのパス取得を関数化しました。
 
その結果、今まで正常に動いていた、リンクテーブルの更新が動かなくなってしまいました。
 
【リンク情報の取得関数】
Public Function DB_Connection() As String 'リンク元DB
Dim db As DAO.Database, tb As DAO.TableDef
Dim strConnect As String
Dim strName As String
''現在のリンクテーブルの接続情報を取得
    Set db = CurrentDb
    Set tb = dbs.TableDefs("T_仕訳帳") '現在のリンクテーブルの定義情報を開く
    strConnect = tb.Connect '現在のリンクテーブルの接続情報を取得
 
'現在設定でのリンク先DBの存在確認
    strName = Dir(Replace(strConnect, ";DATABASE=", ""), vbNormal)
 
'リンク先DBが存在しないときの処理
    If strName = "" Then
        DB_Connection = CurrentProject.Path & "\anocoraData.mdb"
    Else
        DB_Connection = Replace(strConnect, ";DATABASE=", "")
    End If
End Function
【リンク情報の更新】
    Set dbs = CurrentDb 'カレントDBの取得
 
    'テーブルオブジェクトを列挙
    For Each rs In dbs.TableDefs
        'リンクテーブルだけを処理
        If rs.Connect <> "" Then
        MsgBox ";DATABASE=" & DB_Connection & ";TABLE=" & rs.Name
            rs.Connect = ";DATABASE=" & DB_Connection & ";TABLE=" & rs.Name
            rs.RefreshLink 'リンク情報の更新
        End If
    Next rs
 
    dbs.Close: Set dbs = Nothing
原因は、リンク情報の更新に、リンク元取得関数を使い、DAO.DatabaseとDAO.TableDefの変数にパブリック指定の変数を使用していたことでした。
記述のように、関数内の変数指定を、プロシージャ内で使用する変数に変更することで、対処できました。
 
今まで、こんな事態に遭遇したことはなく、コードの記載ミスだと思って、対処しようとしたため、なかなか原因が掴めませんでした。
 
関数部分の変数について、プロシージャ内で使用する変数に変更していきます。

« VBAの参照設定 | トップページ | いたずらパンク »

Access 業務管理」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Public指定の変数の怖さ:

« VBAの参照設定 | トップページ | いたずらパンク »

スライムパンク防止剤被害

川越市周辺の自転車屋MAP

埼玉県内出張修理店情報

自転車出張修理のブログ

カテゴリー

無料ブログはココログ

ブログランキング