🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

6958閲覧

Execute(ADODB.Connection)にて取得したRecordsetの動的挙動に関する不明事項

kaxzuma

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2019/09/29 07:19

編集2019/09/29 07:23

確認したいこと

無指定版ではRecordset側の値が動的に連動する実行結果となります。
解消版では、Recordset.Openにてオプションを指定し静的に取得するようにして解消いたしました。
無指定版の場合の動的挙動について下記2点わかりますでしょうか?

  1. 無指定版でSet rs = adcn.Executeにて格納している部分で明示的に指定はしていないのですがCursorTypeとLockTypeは何が指定されているのでしょうか?
  2. テーブルスキャンは上記の格納と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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

カーソル タイプを指定しない場合、ADO はデフォルトで前方スクロール カーソルを開きます。
LockType プロパティは、Recordset が閉じているときは読み取り/書き込みが可能であり、開いているときは読み取り専用です。まRecordset オブジェクトで利用できる実際のロック機能を調べるには、Supports メソッドを使うようです。

参考

また単に現在のカーソルタイプやロックタイプを知りたい場合はVBEの標準機能である、debug.printや、ステップ実行でローカルウインドウを表示するなどしてデバックすれば確認できると思います。

投稿2019/10/22 15:41

rinren

総合スコア107

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaxzuma

2019/11/13 10:56

ご回答ありがとうございます、お礼遅れ申し訳ありません。ADOのデフォルトについて理解がなく助かりました。 Supportsメソッドは使ったことがなく実際に確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問