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