#713 連結フォームを開いたままリンク先DBを切り替えるには? フォーム、VBA

フォームを開いた状態でリンクテーブルのリンク先データベースを切り替えたい場合、リンクテーブルと連結されたフォームを開いていない状態で行うことが最も確実です。しかし下図のようにリンクテーブルの内容を表示するとともにリンク先DBの切り替えを行う画面(ここではタブコントロールで分けていますがフォームは1つです)としたい場合、若干の問題が発生します。

このフォームではレコードソースが「stblOptions」テーブルとなっており、そのテーブルは「C:\テスト\Data1.accdb」内のテーブルを参照するリンクテーブルとなっています。


またここでは[リンク実行]ボタンのクリック時イベントには次のようなコードを書いています。

Private Sub cmdリンク実行_Click()
'[リンク実行]ボタンクリック時

  '再リンクの実行
  If ReLinkTable(Me!txtFilePath) Then
    '再リンク成功時
    Beep
    MsgBox "リンク先データベースの変更を完了しました!", vbOKOnly + vbInformation
  End If

End Sub

※ここでは「ReLinkTable」というプロシージャを呼び出しています。これは独自のものですが、その詳細は記載していません。「#574 リンクテーブルを見つけて再リンクする手順」にあるコードをプロシージャ化したものとお考えください。


ここで、リンク先を「C:\テスト\Data2.accdb」内の同名テーブルに切り替えてみます。そのテーブルのデータ内容は次のようになっています。


その実行結果は下図の通りです。
  • 実行前の[HTMLオプション]タブの表示内容
  • [リンク先データベースの変更]タブの[リンク実行]ボタンのクリック直後
  • 実行後の[HTMLオプション]タブの表示内容


    この図を見ると、実行前と後で画面の表示内容が切り替わっていないことが分かります。ここで仮にフォームを再クエリしたとして、再描画や再計算を実行したとしても変わりません。

    この状態でフォームをいったん閉じ、再度開くと、画面内容が切り替え後のリンクテーブルのものになっていることが分かります(下図)。
  • フォームを開き直したときの[HTMLオプション]タブの表示内容

では、このような画面でリンク先DBを切り替えた直後、”すぐに画面表示を新しいリンクテーブルの内容に切り替える”ためにはどうしたらよいでしょう?。

それには、下記の1行をプログラムに追記し、フォームの「レコードソース」プロパティを再設定します。とはいっても、リンクテーブル名自体はどちらのデータベースでも同じなので、別の値に変更するのではなく、”現在の設定値をそのまま再度代入してやる”だけです。

Private Sub cmdリンク実行_Click()
'[リンク実行]ボタンクリック時

  '再リンクの実行
  If ReLinkTable(Me!txtFilePath) Then
    '再リンク成功時
    'フォームの表示内容を新しいリンク先のデータに更新
    Me.RecordSource = Me.RecordSource     '←← この1行を追加
    Beep
    MsgBox "リンク先データベースの変更を完了しました!", vbOKOnly + vbInformation
  End If

End Sub


このプログラムで上記と同じ操作を行うと、下図のような結果になり、今度はただちに想定した通りの表示になっていることが分かります。
  • 実行前の[HTMLオプション]タブの表示内容
  • 実行後の[HTMLオプション]タブの表示内容
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved