回答編集履歴

1

RefreshAllTableLinks プロシージャに、パススルークエリの接続文字列の再設定を行うコードを追記しました。

2024/04/09 05:01

投稿

sk.exe
sk.exe

スコア908

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 "テーブル定義[" & strLinkTableName & "]を参照中"
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