Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2028 / 2272 ツリー ←次へ | 前へ→

【4201】リンクのループ? nemotake 05/1/19(水) 12:30 質問[未読]
【4202】Re:リンクのループ? MJM 05/1/19(水) 13:39 回答[未読]
【4203】Re:リンクのループ? nemotake 05/1/19(水) 13:51 お礼[未読]
【4204】Re:リンクのループ? nemotake 05/1/19(水) 14:27 質問[未読]
【4205】Re:リンクのループ? MJM 05/1/19(水) 15:29 回答[未読]
【4207】Re:リンクのループ? nemotake 05/1/19(水) 17:07 質問[未読]
【4208】Re:リンクのループ? MJM 05/1/19(水) 17:30 回答[未読]
【4214】Re:リンクのループ? nemotake 05/1/20(木) 8:57 質問[未読]
【4215】Re:リンクのループ? MJM 05/1/20(木) 9:25 回答[未読]
【4217】Re:リンクのループ? nemotake 05/1/20(木) 12:12 お礼[未読]

【4201】リンクのループ?
質問  nemotake  - 05/1/19(水) 12:30 -

引用なし
パスワード
   顧客情報.mdbに199002、199003、199004、199005・・・という名前のテーブルがあります。もうひとつ日付テーブルに199002と199004と入力した場合、顧客情報.mdbの199002にリンクし、クエリー実行したあとにリンクを解除し、顧客情報.mdbの199003にリンクし、クエリー実行したあとにリンクを解除し、顧客情報.mdbの199004にリンクし、クエリー実行したあとにリンクを解除して終了したいですが、全然わかりません。今は全部をリンクしてマクロで判断して実行しています。この場合ですと、顧客情報.mdbにデータを追加するとマクロも修正したければなりません。自分のレベルはとても低いので、教えてください。
宜しくお願いします。

【4202】Re:リンクのループ?
回答  MJM  - 05/1/19(水) 13:39 -

引用なし
パスワード
   こんにちは。

DAOなら、TableDef オブジェクトで、
CreateTableDef メソッド
Connect プロパティ
SourceTableName プロパティ
Append メソッド
Delete メソッド
などを用いては如何でしょうか。

【4203】Re:リンクのループ?
お礼  nemotake  - 05/1/19(水) 13:51 -

引用なし
パスワード
   MJM さん、ありがとうございます。
ヘルプを見てがんばってみます。

【4204】Re:リンクのループ?
質問  nemotake  - 05/1/19(水) 14:27 -

引用なし
パスワード
   ▼MJM さん:
マクロでテーブルのリンクまたは解除はどうすればいいですか?
ヘルプを見ましたがよくわかりませんでした。すみません。
宜しくお願いします。

【4205】Re:リンクのループ?
回答  MJM  - 05/1/19(水) 15:29 -

引用なし
パスワード
   マクロですか?

マクロとなると、
TransferDatabase/データベース変換 アクションのTransfer TypeがLink
DeleteObject/オブジェクトの削除 アクション
または、
RunCommand/コマンドの実行 アクションの
acCmdLinkTables
acCmdRemoveTable
あたりを用いることになるのでしょうか。
マクロはほとんど使用しませんので不明です。

VBAなら、

Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim TD As DAO.TableDef

Set DB = CurrentDb
Set RS = DB.OpenRecordset("日付テーブル")

Do While Not RS.EOF

  'ローカルでのテーブル名でオブジェクトを作成
  Set TD = DB.CreateTableDef(RS![テーブル名])

  'ローカルテーブルが残ってた場合を考慮して、念のため一旦削除
  On Error Resume Next
  DB.TableDefs.Delete RS![テーブル名]
  On Error GoTo 0

  'リンク先データベースの接続情報を設定
  TD.Connect = ";DATABASE=C:\Temp\db1.mdb"

  'リンク先データベースのテーブル名を設定
  TD.SourceTableName = RS![テーブル名]

  '作成したオブジェクトをコレクションに追加
  DB.TableDefs.Append TD

  'クエリ実行

  'コレクションからオブジェクトを削除
  DB.TableDefs.Delete RS![テーブル名]

  RS.MoveNext

Loop

RS.Close
DB.Close
Set TD = Nothing
Set RS = Nothing
Set DB = Nothing

という感じでは如何でしょうか。

【4207】Re:リンクのループ?
質問  nemotake  - 05/1/19(水) 17:07 -

引用なし
パスワード
   ▼MJM さん:
ありがとうございます。早速やってみましたがうまくいきません。
リンクだけのモジュールを作ってみましたがコンパイルでエラーになってしまいます。
どこがおかしいのでしょうか?

Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim TD As DAO.TableDef
Dim INRs As Recordset
Dim 読込 As String
Dim 名前 As String

Set Db = CurrentDb
読込 = "日付テーブル"
Set INRs = Db.OpenRecordset(読込,dbOpenDynaset)

名前 = "D:\顧客データ\" & INRs!開始年 & ".mdb"

TD.Connect = ";DATABASE=名前"
TD.SourceTableName = RS!顧客テーブル
DB.TableDefs.Append TD   (エラー場所)

INRs.Close
RS.Close
DB.Close
Set TD = Nothing
Set RS = Nothing
Set DB = Nothing

と記述したのですがエラー場所でメソッドまたはデータメンバーが見つかりませんになってしまいます。
宜しくお願いします。

【4208】Re:リンクのループ?
回答  MJM  - 05/1/19(水) 17:30 -

引用なし
パスワード
   >名前 = "D:\顧客データ\" & INRs!開始年 & ".mdb"

日付テーブルの開始年というフィールドに格納されている値を
データベースをリンク先とする
という事でしょうか?

>TD.Connect = ";DATABASE=名前"
TD.Connect = ";DATABASE=" & 名前

ですね。

TD.Connect = ";DATABASE=D:\顧客データ\" & INRs!開始年 & ".mdb"
として、1行でもいいですね。

【4214】Re:リンクのループ?
質問  nemotake  - 05/1/20(木) 8:57 -

引用なし
パスワード
   ▼MJM さん:
またまたありがとうございます。早速やってみましたがうまくいきません。
やはりコンパイルでエラーになってしまいます。MJM さんの指摘とうりすうせいしたのでが、どこがおかしいのでしょうか?

Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim TD As DAO.TableDef
Dim INRs As Recordset
Dim 読込 As String
Dim 名前 As String

Set Db = CurrentDb
読込 = "日付テーブル"
Set INRs = Db.OpenRecordset(読込,dbOpenDynaset)

名前 = "D:\顧客データ\" & INRs!開始年 & ".mdb"

TD.Connect = ";DATABASE=" & 名前
TD.SourceTableName = RS!顧客テーブル
DB.TableDefs.Append TD   (エラー場所)

INRs.Close
RS.Close
DB.Close
Set TD = Nothing
Set RS = Nothing
Set DB = Nothing

と記述したのですがエラー場所(TableDefsのところにカーソルがきています)
でメソッドまたはデータメンバーが見つかりませんになってしまいます。
宜しくお願いします。

【4215】Re:リンクのループ?
回答  MJM  - 05/1/20(木) 9:25 -

引用なし
パスワード
   見落としてました。前RESでの

  'ローカルでのテーブル名でオブジェクトを作成
  Set TD = DB.CreateTableDef(RS![テーブル名])

が、抜けてますね。

【4217】Re:リンクのループ?
お礼  nemotake  - 05/1/20(木) 12:12 -

引用なし
パスワード
   ▼MJM さん:

本当にありがとうございました。
助かりました。

2028 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078255
(SS)C-BOARD v3.8 is Free