回答編集履歴

2

追記

2016/05/20 02:30

投稿

kaz.Suenaga
kaz.Suenaga

スコア2037

test CHANGED
@@ -77,3 +77,77 @@
77
77
 
78
78
 
79
79
  なお上記のソース、実際はテーブル名、接続文字列などを配列で用意してあり、For Each で書き換えていました。
80
+
81
+
82
+
83
+
84
+
85
+ -----
86
+
87
+ ## 2016.05.20. 11:30 追記
88
+
89
+
90
+
91
+ 動作テストしてないですが、こんな感じじゃないでしょうか。
92
+
93
+ 削除の方は問題ないと思いますので作成部分だけです。
94
+
95
+
96
+
97
+ ```VBA
98
+
99
+ Sub create_link_table()
100
+
101
+ Dim cat As New ADOX.Catalog
102
+
103
+ Dim tbl As ADOX.Table
104
+
105
+
106
+
107
+ Set cat = New ADOX.Catalog
108
+
109
+ Set cat.ActiveConnection = CurrentProject.Connection
110
+
111
+
112
+
113
+ ' 複数ある場合はこの下の2行を繰り返す
114
+
115
+ Set tbl = get_table_def([SQLServerへの接続文字列], [SQLServer上のテーブル名], [Accessで作るテーブル名])
116
+
117
+ cat.Tables.Append tbl
118
+
119
+
120
+
121
+ Set tbl = Nothing
122
+
123
+ Set cat = Nothing
124
+
125
+ End Sub
126
+
127
+
128
+
129
+ ' 作成するリンクテーブルオブジェクト
130
+
131
+ Function get_table_def(strConnection as String, strRemoteTable As String, strLocalTable as string) As ADOX.Table
132
+
133
+ Set get_table_def = New ADOX.Table
134
+
135
+
136
+
137
+ With get_table_def
138
+
139
+ .Name = strLocalTable
140
+
141
+ .Properties("Jet OLEDB:Create Link") = True
142
+
143
+ .Properties("Jet OLEDB:Link Provider String") = strConnection
144
+
145
+ .Properties("Jet OLEDB:Remote Table Name") = strRemoteTable
146
+
147
+ End With
148
+
149
+
150
+
151
+ End Function
152
+
153
+ ```

1

追記

2016/05/20 02:30

投稿

kaz.Suenaga
kaz.Suenaga

スコア2037

test CHANGED
@@ -9,3 +9,71 @@
9
9
 
10
10
 
11
11
  じゃないでしょうか。
12
+
13
+
14
+
15
+ -----
16
+
17
+ ## 2016.05.20. 11:00 追記
18
+
19
+
20
+
21
+ だいぶ前にリンクテーブルの「作成」ではなく、すでにあるリンクの接続先DBを「更新」する処理を書いたのを思い出したのでサンプルです。
22
+
23
+ 開発用DBと本番用DBに全く同じ構成のテーブル構造がある状態で、接続先を開発DBと本番DBを切り替えるために使っていたものですので、DB接続部分だけ書き換えています。
24
+
25
+
26
+
27
+ ```VBA
28
+
29
+ ' リンクテーブル更新
30
+
31
+ Sub update_link_table()
32
+
33
+ Dim objADOXCat As ADOX.Catalog
34
+
35
+
36
+
37
+ Dim strConnection as String ' DBへの接続文字列
38
+
39
+ Dim strTableName As String ' リンク先を更新するテーブル名
40
+
41
+
42
+
43
+ strConnection = "[接続文字列]"
44
+
45
+ strTableName = "[テーブル名]"
46
+
47
+
48
+
49
+ Set objADOXCat = New ADOX.Catalog
50
+
51
+ With objADOXCat
52
+
53
+ Set .ActiveConnection = CurrentProject.Connection
54
+
55
+ With .Tables(strTableName)
56
+
57
+ .Properties("Jet OLEDB:Link Provider String") = strConnection
58
+
59
+ .Properties.Refresh
60
+
61
+ End With
62
+
63
+ End With
64
+
65
+
66
+
67
+ Set objADOXCat = Nothing
68
+
69
+ End Sub
70
+
71
+ ```
72
+
73
+
74
+
75
+ 作成の場合も理屈上は `With .Tables(strTableName)` ~ `End With` の間を作成用に書けば使えるかと思います。
76
+
77
+
78
+
79
+ なお上記のソース、実際はテーブル名、接続文字列などを配列で用意してあり、For Each で書き換えていました。