回答編集履歴
2
追記
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
追記
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 で書き換えていました。
|