確認したいこと
無指定版ではRecordset側の値が動的に連動する実行結果となります。
解消版では、Recordset.Openにてオプションを指定し静的に取得するようにして解消いたしました。
無指定版の場合の動的挙動について下記2点わかりますでしょうか?
- 無指定版で
Set rs = adcn.Execute
にて格納している部分で明示的に指定はしていないのですがCursorTypeとLockTypeは何が指定されているのでしょうか? - テーブルスキャンは上記の格納と
Debug.Print rs!ID & " " & rs!WORD
のタイミングで行われているのでしょうか?動的に結果が変わってたのでイメージが難しいです
発生している問題・エラーメッセージ
実行時エラー '-2147217885(80040e23)': 「レコードは削除されています。」
該当のソースコード
- 無指定
VBA
1Public Sub testAdo() 2 Dim adcn As ADODB.Connection 3 Dim rs As ADODB.Recordset 4 5 Set adcn = CreateObject("ADODB.Connection") 6 adcn.Provider = "Microsoft.ACE.OLEDB.12.0" 7 adcn.Open CurrentProject.Path & "\" & "テスト.accdb" 8 adcn.Execute ("Insert into TST_TBL VALUES(""ADOZZ"",""ADOAZWRD"")") 9 Set rs = adcn.Execute("select * from TST_TBL") 10 adcn.Execute ("Delete FROM TST_TBL") 11 12 Do Until rs.EOF 13 Debug.Print rs!ID & " " & rs!WORD 14 rs.MoveNext 15 Loop 16 17 adcn.Close 18 Set rs = Nothing 19 Set adcn = Nothing 20 21End Sub 22
- 解消版
VBA
1Public Sub testAdo() 2 Dim adcn As ADODB.Connection 3 Dim rs As ADODB.Recordset 4 5 Set adcn = CreateObject("ADODB.Connection") 6 adcn.Provider = "Microsoft.ACE.OLEDB.12.0" 7 adcn.Open CurrentProject.Path & "\" & "テスト.accdb" 8 adcn.Execute ("Insert into TST_TBL VALUES(""ADOZZ"",""ADOAZWRD"")") 9 Set rs = CreateObject("ADODB.Recordset") 10 rs.Open "select * from TST_TBL", adcn, adOpenStatic, adLockReadOnly 11 adcn.Execute ("Delete FROM TST_TBL") 12 13 Do Until rs.EOF 14 Debug.Print rs!ID & " " & rs!WORD 15 rs.MoveNext 16 Loop 17 18 adcn.Close 19 Set rs = Nothing 20 Set adcn = Nothing 21 22End Sub 23
補足情報(FW/ツールのバージョンなど)
Office 365 Solo
Accessのバージョンは1908
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/13 10:56