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