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 業務管理」カテゴリの記事
- お客様宅の緯度経度情報(2018.07.24)
- モジュールとメインフロー(2018.03.01)
- 受注情報の登録パターン(2017.10.11)
- 懸案は解決しましたが、PCが不調です。(2017.10.08)
- コンボボックスのリスト外入力からの振り仮名取得(2017.10.07)
コメント