#696 | リンクテーブルなしで外部DBのテーブルにアクセスするには? | VBA | |
外部のデータベースファイル内にあるテーブルを参照する場合、多くはそれを”リンクテーブル”として接続して使うことが多いと思います。直接その内容を自身のデータベースから確認できますし、データ編集もできますし、クエリやフォームを作る際も何かと便利です。 しかし、データの取り扱いや処理によっては必ずしもリンクテーブルとして持つ必要はありません。たとえば、下記の例では外部の「Database1.accdb」にある「tbl販売計画」テーブルに対して、あるプロシージャ上で接続からデータ処理までを行っています。リンクテーブルとの違いは、「OpenDatabase」メソッドを使って、フルパスを指定して外部のデータベースファイルを開くくらいです。 Dim dbsExt As Database Dim rstExt As Recordset Dim dd As Byte '外部のデータベースを開く Set dbsExt = OpenDatabase("C:\テスト\Database1.accdb") '外部のテーブルを開く Set rstExt = dbsExt.OpenRecordset("tbl販売計画") With rstExt '先頭レコードの値を取得する Debug.Print !ID, !日付, !商品コード, .Fields("1日") '先頭コードを編集して結果を取得する .Edit .Fields("1日") = 9999 .Update Debug.Print !ID, !日付, !商品コード, .Fields("1日") '新規レコードを追加して結果を取得する .AddNew !日付 = #10/1/2020# !商品コード = "4901340136922" For dd = 1 To 31 .Fields(dd & "日") = dd Next dd .Update .MoveLast Debug.Print !ID, !日付, !商品コード For dd = 1 To 31 Debug.Print .Fields(dd & "日") Next dd .Close End With 実行例:
【注意事項】
上記の例では外部のテーブルだけを扱っています。このプロシージャ内で自分自身のデータベース内のテーブルなどを処理することはしていません。しかしもし、同じプロシージャ内で外部のテーブルも扱うし内部のテーブルも扱うといった場合、たとえば外部のテーブルのレコードを読み込んでそれを内部テーブルに追加するような場合、自身のデータベースを開くために「Set dbs = CurrentDb」のような1行もいっしょに記述するはずです。 そのような場合、「Set dbs = CurrentDb」の記述位置が「Set dbsExt = OpenDatabase」より後ろだとエラーとなることがあります。そのようなときは「Set dbs = CurrentDb」を「Set dbsExt = OpenDatabase」より前に記述してみてください。 |
|||
|
Copyright © T'sWare All rights reserved |