質問編集履歴

7

2020/06/14 12:44

投稿

binone
binone

スコア1

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- VBAのDAO.RecordsetオブジェクトにMySQLのリンクテーブルSQLを渡して操作する際に、
13
+ VBAのDAO.RecordsetオブジェクトにMySQLのリンクテーブル経由でSQLを渡して操作する際に、
14
14
 
15
15
  Accessが異常終了してしまいます。
16
16
 
@@ -98,9 +98,9 @@
98
98
 
99
99
  * MySQLの最新版(8.0.13→8.0.20)へのバージョンアップ
100
100
 
101
- * Office更新オプション最新化
101
+ * Office更新オプションを使ってAccessを最新化
102
-
102
+
103
- * ODBCドライバの削除・再インストール
103
+ * MySQL ODBCドライバの削除・再インストール
104
104
 
105
105
  * 別のクライアント(Windows 10 2004)のAccess 2016から
106
106
 
@@ -116,7 +116,7 @@
116
116
 
117
117
 
118
118
 
119
- * サーバ側
119
+ サーバ側
120
120
 
121
121
  - OS:Microsoft Windows Server 2016 64bit バージョン1607 (OSビルド 14393.2639)
122
122
 
@@ -124,7 +124,7 @@
124
124
 
125
125
 
126
126
 
127
- * クライアント側
127
+ クライアント側
128
128
 
129
129
  - OS:Microsoft Windows 10 64bit 2004 (OSビルド 19041.329)
130
130
 
@@ -162,7 +162,7 @@
162
162
 
163
163
  `・WindowsUpdateを6/13日前後で実行しているのか`
164
164
 
165
-  →いいえ。
165
+  →いいえ。履歴を見ましたがありませんでした。
166
166
 
167
167
 
168
168
 
@@ -192,9 +192,9 @@
192
192
 
193
193
  1. `!SEQNUM = !SEQNUM + 1` をコメントアウト
194
194
 
195
- 2. `getdno = Format(!SEQNUM, "0000")` の行にブレークポイントを設定
195
+ 2. `getno = Format(!SEQNUM, "0000")` の行にブレークポイントを設定
196
-
196
+
197
- 3. イミディエイトウィンドウで `?getdno()` を実行し、ブレークポイントで中断する。
197
+ 3. イミディエイトウィンドウで `?getno()` を実行し、ブレークポイントで中断する。
198
198
 
199
199
  4. `RS.Fields("SEQNUM")` で変数の内容を出力する都度、内容が変わる。
200
200
 

6

ODBCドライバ設定の参考URLを追加

2020/06/14 12:44

投稿

binone
binone

スコア1

test CHANGED
File without changes
test CHANGED
@@ -230,7 +230,7 @@
230
230
 
231
231
 
232
232
 
233
- * ODBCドライバの設定は以下の手順です。
233
+ * ODBCドライバの設定は以下の手順です。[参考URL](https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-usagenotes-apptips-microsoft-access.html)
234
234
 
235
235
  1. 32bit版ODBCデータソースアドミニストレータを開く。`%windir%\SysWOW64\odbcad32.exe`
236
236
 

5

ODBCドライバの設定内容を追記

2020/06/14 11:34

投稿

binone
binone

スコア1

test CHANGED
File without changes
test CHANGED
@@ -186,7 +186,7 @@
186
186
 
187
187
 
188
188
 
189
- イミディエイトウィンドウで操作していると、以下のようなメモリの参照が誤っているような、異常な挙動が確認できました。
189
+ * イミディエイトウィンドウで操作していると、以下のようなメモリの参照が誤っているような、異常な挙動が確認できました。
190
190
 
191
191
 
192
192
 
@@ -222,6 +222,30 @@
222
222
 
223
223
 
224
224
 
225
- ・`再現用.accdb`をつくりましたので添付します。
225
+ ### 再現用情報
226
-
226
+
227
+
228
+
227
- https://drive.google.com/file/d/150voL25yWJFjbevG4s0TsPwCyTCz9nwL/view?usp=sharing
229
+ * [再現用.accdb](https://drive.google.com/file/d/150voL25yWJFjbevG4s0TsPwCyTCz9nwL/view?usp=sharing) をつくりました。
230
+
231
+
232
+
233
+ * ODBCドライバの設定は以下の手順です。
234
+
235
+ 1. 32bit版ODBCデータソースアドミニストレータを開く。`%windir%\SysWOW64\odbcad32.exe`
236
+
237
+ 2. `システムDSN` を追加
238
+
239
+ 3. `MySQL ODBC 8.0 ANSI Driver` を選択
240
+
241
+ 4. MySQLサーバの`IP:port,User/Password,database` を入力して`test`ボタンで接続が通ることを確認
242
+
243
+ 5. `Connection`タブの`Allow big result sets`にチェック
244
+
245
+ 6. `Connection`タブの`Character Set` を `cp932`
246
+
247
+ 7. `Metadata`タブの`Treat BIGINT columns as INT columns`にチェック
248
+
249
+ 8. `Cursors/Results`タブの`Return matched rows instead of affected rows`にチェック
250
+
251
+ 9. `OK`ボタンで保存

4

`再現用.accdb`を作成して添付

2020/06/14 10:56

投稿

binone
binone

スコア1

test CHANGED
File without changes
test CHANGED
@@ -76,7 +76,7 @@
76
76
 
77
77
  .Update
78
78
 
79
- getdno = Format(!SEQNUM, "0000")
79
+ getno = Format(!SEQNUM, "0000")
80
80
 
81
81
  End With
82
82
 
@@ -219,3 +219,9 @@
219
219
  ??????????
220
220
 
221
221
  ```
222
+
223
+
224
+
225
+ ・`再現用.accdb`をつくりましたので添付します。
226
+
227
+ https://drive.google.com/file/d/150voL25yWJFjbevG4s0TsPwCyTCz9nwL/view?usp=sharing

3

イミディエイトウィンドウで操作していると、以下のようなメモリの参照が誤っているような、異常な挙動が確認

2020/06/14 10:45

投稿

binone
binone

スコア1

test CHANGED
File without changes
test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
  ```Visual Basic For Applications
62
62
 
63
- Public Function getno(ByVal denpcd As String) As String
63
+ Public Function getno() As String
64
64
 
65
65
  Dim RS As DAO.Recordset
66
66
 
@@ -183,3 +183,39 @@
183
183
  );
184
184
 
185
185
  ```
186
+
187
+
188
+
189
+ ・イミディエイトウィンドウで操作していると、以下のようなメモリの参照が誤っているような、異常な挙動が確認できました。
190
+
191
+
192
+
193
+ 1. `!SEQNUM = !SEQNUM + 1` をコメントアウト
194
+
195
+ 2. `getdno = Format(!SEQNUM, "0000")` の行にブレークポイントを設定
196
+
197
+ 3. イミディエイトウィンドウで `?getdno()` を実行し、ブレークポイントで中断する。
198
+
199
+ 4. `RS.Fields("SEQNUM")` で変数の内容を出力する都度、内容が変わる。
200
+
201
+ 文字列型ではないのに文字列や文字化けした内容が返ってくる。
202
+
203
+ ```
204
+
205
+ ?RS.Fields("SEQNUM")
206
+
207
+ ツール
208
+
209
+ ?RS.Fields("SEQNUM")
210
+
211
+ 
212
+
213
+ ?RS.Fields("SEQNUM")
214
+
215
+ ??潮
216
+
217
+ ?RS.Fields("SEQNUM")
218
+
219
+ ??????????
220
+
221
+ ```

2

依頼情報を追記

2020/06/14 10:32

投稿

binone
binone

スコア1

test CHANGED
File without changes
test CHANGED
@@ -131,3 +131,55 @@
131
131
  - Microsoft Access 2016 32ビット
132
132
 
133
133
  - MySQL ODBCドライバ 8.0.20(Windows X86)
134
+
135
+
136
+
137
+ ### 追加情報
138
+
139
+
140
+
141
+ `・上記コードの何行目でエラー落ちるのか`
142
+
143
+  →以下の行をコメントアウトするとおちません。
144
+
145
+   VBAのイミディエイトウィンドウから、行をコメントアウトしながら、関数を実行しました。
146
+
147
+   落ちる瞬間に「型が一致しません。」とエラーが表示されることもあります。
148
+
149
+ ```
150
+
151
+ !SEQNUM = !SEQNUM + 1
152
+
153
+ ```
154
+
155
+
156
+
157
+ `・どのリンクテーブルでもDAOで開くと落ちるのか`
158
+
159
+  →はい。他のリンクテーブルでも同様の現象が起きます。
160
+
161
+
162
+
163
+ `・WindowsUpdateを6/13日前後で実行しているのか`
164
+
165
+  →いいえ。
166
+
167
+
168
+
169
+ `・SYS_DENPYO_SEQの定義(create table文)`
170
+
171
+  →以下の通りです。
172
+
173
+ ```sql
174
+
175
+ CREATE TABLE SYS_DENPYO_SEQ(
176
+
177
+ SEQNUM DECIMAL(4,0) NOT NULL DEFAULT 0,
178
+
179
+ INS TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
180
+
181
+ UPD TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
182
+
183
+ );
184
+
185
+ ```

1

クライアントOSの誤りがあったため訂正。

2020/06/14 10:14

投稿

binone
binone

スコア1

test CHANGED
File without changes
test CHANGED
@@ -118,7 +118,7 @@
118
118
 
119
119
  * サーバ側
120
120
 
121
- - OS:Windows Server 2016 バージョン1607 (OSビルド 14393.2639)
121
+ - OS:Microsoft Windows Server 2016 64bit バージョン1607 (OSビルド 14393.2639)
122
122
 
123
123
  - MySQL Community Server 8.0.20(Windows X64)
124
124
 
@@ -126,8 +126,8 @@
126
126
 
127
127
  * クライアント側
128
128
 
129
- - OS:Windows Server 2016 バージョン1607 (OSビルド 14393.2639)
129
+ - OS:Microsoft Windows 10 64bit 2004 (OSビルド 19041.329)
130
130
 
131
- - Access 2016 32ビット
131
+ - Microsoft Access 2016 32ビット
132
132
 
133
133
  - MySQL ODBCドライバ 8.0.20(Windows X86)