回答編集履歴
1
RefreshAllTableLinks プロシージャに、パススルークエリの接続文字列の再設定を行うコードを追記しました。
test
CHANGED
@@ -7,34 +7,33 @@
|
|
7
7
|
```vba
|
8
8
|
Public Function RefreshAllTableLinks() As Boolean
|
9
9
|
On Error GoTo Err_RefreshAllTableLinks
|
10
|
-
|
10
|
+
|
11
11
|
'既定の戻り値(失敗時)は False
|
12
12
|
RefreshAllTableLinks = False
|
13
13
|
|
14
14
|
Dim db As DAO.Database
|
15
15
|
Dim tdf As DAO.TableDef
|
16
16
|
Dim strConnect As String
|
17
|
-
Dim strLinkTableName As String
|
18
17
|
Dim lngRefreshedCount As Long
|
19
|
-
|
20
|
-
|
18
|
+
|
21
19
|
strConnect = "ODBC;DRIVER=SQL Server との接続に用いるドライバー名;" & _
|
22
20
|
"SERVER=SQL Server インスタンス名;" & _
|
23
21
|
"UID=接続ユーザー名;" & _
|
24
22
|
"PWD=パスワード;" & _
|
25
23
|
"DATABASE=データベース名;"
|
24
|
+
|
26
|
-
|
25
|
+
Debug.Print strConnect
|
26
|
+
|
27
|
-
Application.Echo False, "テーブルの再リンク
|
27
|
+
Application.Echo False, "リンクテーブルの再リンクを実行しています"
|
28
|
-
|
28
|
+
|
29
29
|
'カレントデータベースの参照
|
30
30
|
Set db = CurrentDb
|
31
|
-
|
31
|
+
|
32
32
|
'データベースの全てのテーブル定義を順次参照する
|
33
33
|
For Each tdf In db.TableDefs
|
34
34
|
'ODBCリンクテーブルである場合
|
35
35
|
If (Not tdf.Name Like "MSys*") And (tdf.Connect Like "ODBC;*") Then
|
36
|
-
strLinkTableName = tdf.Name
|
37
|
-
Debug.Print "テーブル定義[" &
|
36
|
+
Debug.Print "テーブル定義[" & tdf.Name & "]を参照中"
|
38
37
|
'接続文字列を更新
|
39
38
|
tdf.Connect = strConnect
|
40
39
|
'リンクのリフレッシュ
|
@@ -44,33 +43,54 @@
|
|
44
43
|
Debug.Print "再リンク成功"
|
45
44
|
End If
|
46
45
|
Next
|
47
|
-
|
46
|
+
|
48
47
|
Debug.Print lngRefreshedCount & " 個のリンクテーブルの再リンクを実行しました。"
|
48
|
+
|
49
|
-
|
49
|
+
Application.Echo False, "パススルークエリの接続文字列の再設定を実行しています"
|
50
|
+
|
51
|
+
Dim qdf As DAO.QueryDef
|
52
|
+
|
53
|
+
lngRefreshedCount = 0
|
54
|
+
|
55
|
+
'データベースの全てのクエリ定義を順次参照する
|
56
|
+
For Each qdf In db.QueryDefs
|
57
|
+
'パススルークエリである場合
|
58
|
+
If (qdf.Type = dbQSQLPassThrough) And (qdf.Connect Like "ODBC;*") Then
|
59
|
+
Debug.Print "パススルークエリ[" & qdf.Name & "]を参照中"
|
60
|
+
'接続文字列を更新
|
61
|
+
qdf.Connect = strConnect
|
62
|
+
'再リンクカウンターをインクリメント
|
63
|
+
lngRefreshedCount = lngRefreshedCount + 1
|
64
|
+
Debug.Print "接続文字列の再設定成功"
|
65
|
+
End If
|
66
|
+
Next
|
67
|
+
|
68
|
+
Debug.Print lngRefreshedCount & " 個のパススルークエリの接続文字列の再設定を実行しました。"
|
69
|
+
|
50
70
|
'全て成功したら True を返す
|
51
71
|
RefreshAllTableLinks = True
|
52
|
-
|
72
|
+
|
53
73
|
Exit_RefreshAllTableLinks:
|
54
|
-
|
74
|
+
|
55
75
|
Application.Echo True, ""
|
56
|
-
|
76
|
+
|
57
77
|
Set tdf = Nothing
|
58
78
|
Set db = Nothing
|
59
|
-
|
79
|
+
|
60
80
|
Exit Function
|
61
81
|
|
62
82
|
'エラー時処理
|
63
83
|
Err_RefreshAllTableLinks:
|
64
|
-
|
84
|
+
|
65
85
|
Application.Echo True, ""
|
66
|
-
|
86
|
+
|
67
87
|
Dim strErrMsg As String
|
68
|
-
|
88
|
+
|
69
89
|
strErrMsg = "再リンク処理中に以下の実行時エラーが発生しました。" & vbCrLf & _
|
70
90
|
Err.Number & ": " & Err.Description
|
71
|
-
|
91
|
+
|
72
92
|
Debug.Print strErrMsg
|
73
|
-
|
93
|
+
|
74
94
|
MsgBox strErrMsg, _
|
75
95
|
vbCritical, _
|
76
96
|
"実行時エラー(RefreshAllTableLinks)"
|
@@ -78,6 +98,7 @@
|
|
78
98
|
Resume Exit_RefreshAllTableLinks
|
79
99
|
End Function
|
80
100
|
```
|
101
|
+
(2024/04/09 14:01 パススルークエリの接続文字列の再設定を行うコードを追記しました)
|
81
102
|
|
82
103
|
### スタートアップフォームのフォームモジュール
|
83
104
|
```vba
|