teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2016/05/20 02:30

投稿

kaz.Suenaga
kaz.Suenaga

スコア2042

answer CHANGED
@@ -37,4 +37,41 @@
37
37
 
38
38
  作成の場合も理屈上は `With .Tables(strTableName)` ~ `End With` の間を作成用に書けば使えるかと思います。
39
39
 
40
- なお上記のソース、実際はテーブル名、接続文字列などを配列で用意してあり、For Each で書き換えていました。
40
+ なお上記のソース、実際はテーブル名、接続文字列などを配列で用意してあり、For Each で書き換えていました。
41
+
42
+
43
+ -----
44
+ ## 2016.05.20. 11:30 追記
45
+
46
+ 動作テストしてないですが、こんな感じじゃないでしょうか。
47
+ 削除の方は問題ないと思いますので作成部分だけです。
48
+
49
+ ```VBA
50
+ Sub create_link_table()
51
+ Dim cat As New ADOX.Catalog
52
+ Dim tbl As ADOX.Table
53
+
54
+ Set cat = New ADOX.Catalog
55
+ Set cat.ActiveConnection = CurrentProject.Connection
56
+
57
+ ' 複数ある場合はこの下の2行を繰り返す
58
+ Set tbl = get_table_def([SQLServerへの接続文字列], [SQLServer上のテーブル名], [Accessで作るテーブル名])
59
+ cat.Tables.Append tbl
60
+
61
+ Set tbl = Nothing
62
+ Set cat = Nothing
63
+ End Sub
64
+
65
+ ' 作成するリンクテーブルオブジェクト
66
+ Function get_table_def(strConnection as String, strRemoteTable As String, strLocalTable as string) As ADOX.Table
67
+ Set get_table_def = New ADOX.Table
68
+
69
+ With get_table_def
70
+ .Name = strLocalTable
71
+ .Properties("Jet OLEDB:Create Link") = True
72
+ .Properties("Jet OLEDB:Link Provider String") = strConnection
73
+ .Properties("Jet OLEDB:Remote Table Name") = strRemoteTable
74
+ End With
75
+
76
+ End Function
77
+ ```

1

追記

2016/05/20 02:30

投稿

kaz.Suenaga
kaz.Suenaga

スコア2042

answer CHANGED
@@ -3,4 +3,38 @@
3
3
 
4
4
  `Set tdl = CurrentProject.Tables("dbo_A2")` ← s つき
5
5
 
6
- じゃないでしょうか。
6
+ じゃないでしょうか。
7
+
8
+ -----
9
+ ## 2016.05.20. 11:00 追記
10
+
11
+ だいぶ前にリンクテーブルの「作成」ではなく、すでにあるリンクの接続先DBを「更新」する処理を書いたのを思い出したのでサンプルです。
12
+ 開発用DBと本番用DBに全く同じ構成のテーブル構造がある状態で、接続先を開発DBと本番DBを切り替えるために使っていたものですので、DB接続部分だけ書き換えています。
13
+
14
+ ```VBA
15
+ ' リンクテーブル更新
16
+ Sub update_link_table()
17
+ Dim objADOXCat As ADOX.Catalog
18
+
19
+ Dim strConnection as String ' DBへの接続文字列
20
+ Dim strTableName As String ' リンク先を更新するテーブル名
21
+
22
+ strConnection = "[接続文字列]"
23
+ strTableName = "[テーブル名]"
24
+
25
+ Set objADOXCat = New ADOX.Catalog
26
+ With objADOXCat
27
+ Set .ActiveConnection = CurrentProject.Connection
28
+ With .Tables(strTableName)
29
+ .Properties("Jet OLEDB:Link Provider String") = strConnection
30
+ .Properties.Refresh
31
+ End With
32
+ End With
33
+
34
+ Set objADOXCat = Nothing
35
+ End Sub
36
+ ```
37
+
38
+ 作成の場合も理屈上は `With .Tables(strTableName)` ~ `End With` の間を作成用に書けば使えるかと思います。
39
+
40
+ なお上記のソース、実際はテーブル名、接続文字列などを配列で用意してあり、For Each で書き換えていました。