Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub
を実行したとき
テーブル1にデータがあるときはエラーにはならないのですが
何もデータがないときは「rs.Update」でエラーになります。
なので「Update」は消して実行していますが
「Update」がなくても「Execute」を実行した後は自動的に保存されるのでしょうか?
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
rs.Update '保存
Set rs = Nothing
Set cn = Nothing
End Sub
は
Sub test()
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
cn.Execute "DELETE FROM テーブル1"
Set cn = Nothing
End Sub
と変更しても変わりはありません。
データベースの更新を行うだけが目的であるのならば、コピーを作成する必要はありません。
一方、ユーザーの操作を非同期(操作と処理が同時でないこと)で、データベースに反映したい場合にレコードセットを使用した更新を使用します。
Sub test()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
Set rs = New ADODB.Recordset
rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
'フォームロードでレコードセットを作成し、ボタン押下で削除するなど
'今回は一括削除
Do Until rs.EOF
rs.Delete
rs.MoveNext
Loop
rs.close
cn.close
Set rs = Nothing
Set cn = Nothing
End Sub
No.2
- 回答日時:
補足です。
レコードセットというのは、実際のデータをプログラムのワークエリアに作成したコピーのことです。
そのため、いくらレコードセットのデータを変更使用とも、実際のデータに変更が反映されません。
それは、レコードセットがただのコピーだからです。
レコードセットを取得した状態で、コネクションをきっても問題ないはずです。
コピー(レコードセット)の更新を実データに反映させるためにUpdateメソッドが存在します。
Updateは実際にはSQL文を、つまりUPDATE文やINSERTまたはDELETE文をExecuteしています。
そのため、「Execute」を使うときは「Update」は不要?
という問いへの答えは、Updateによる自動で行われるExecuteを使用するか、自力でExecuteによりSQLを発行するかのどちらかが行われればよいので、不要ですとなります。
コピーだからADOをデバッグしながら実行してもアクセスでデータの編集が可能なのですね。
ひとつ確認なのですが
Executeを使用するときはレコードセットを使用してないのでしょうか?
(私が質問したコードは、rsが活用されていない?)
No.1
- 回答日時:
これで動くと思います。
Sub test()
Dim cn As ADODB.Connection
'''Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Desktop\test1.mdb"
'''Set rs = New ADODB.Recordset
'''rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic
cn.Execute "DELETE FROM テーブル1"
'''rs.Update '保存
'''Set rs = Nothing
cn.close
Set cn = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) 【VBAファイル移動】2つのマクロを順に実行。1つ目のマクロが実行不可⇒2つ目が実行不可となる件 2 2022/07/29 12:17
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
「RunSQL」と「Execute」の違い
Access(アクセス)
-
Access終了時にマクロまたはVBAの実行したい
その他(Microsoft Office)
-
-
4
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
5
ACCESS ADOでupdateが効かない
その他(データベース)
-
6
AccessのDAO.ExecuteとDoCmd.RunSqlの違いについて
その他(データベース)
-
7
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
8
【AccessVBA】レコードセットOpen時の引数について
Access(アクセス)
-
9
参照設定は2.8と6.0 6.1とどちらにチェッ
その他(Microsoft Office)
-
10
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
11
ACCESSでデータ読み取り専用を解除する方法
その他(データベース)
-
12
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
13
Accessフォームを開くときに決まった順番で表示
Access(アクセス)
-
14
ACCESSVBAのseekで複数INDEX検索方法について
Access(アクセス)
-
15
SQLで複数のテーブルと結合したUPDATE文
Visual Basic(VBA)
-
16
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
17
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
18
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
19
Access サブフォームでの選択行の取得
その他(データベース)
-
20
SELECTした結果に行番号を求めたい
PostgreSQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AccessからExcelへエクスポート...
-
VBとアクセスでSQL文に変...
-
手動または分散トランザクショ...
-
ACCESS2010 実行時エラー 2766
-
『列名 '担当者CD' があいま...
-
DataGridViewに複数テーブルの...
-
CSVファイルのエクスポートでソ...
-
ExcelVBAからAccessMDB内のテー...
-
SQLを発行とは?クエリの作成と...
-
他のMDBのテーブルに追加したい
-
VB.NET データセットとADOレコ...
-
HTMLのテーブルの行数が多くな...
-
Accessのフォームでリス...
-
アクティブレポートを使ってDB...
-
C# OleDbDataAdapter.Fillメソ...
-
Accessで別mdbのテーブルをコピー
-
VB.NETからAccess内のデータベ...
-
VBでコンボボックスとテキスト...
-
.net 複数の主キーを設定する方法
-
VBでルックアップテーブルを作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBとアクセスでSQL文に変...
-
Accessで別mdbのテーブルをコピー
-
『列名 '担当者CD' があいま...
-
CSVファイルのエクスポートでソ...
-
AccessからExcelへエクスポート...
-
エクセルのテーブルを解除する...
-
手動または分散トランザクショ...
-
他のMDBのテーブルに追加したい
-
HTMLのテーブルの行数が多くな...
-
SQLを発行とは?クエリの作成と...
-
WORD VBA プログラム修正をお願...
-
ACCESS2010 実行時エラー 2766
-
Excel複数シートをaccessへ一括...
-
ACCESSのテーブル名をリストに...
-
アクセステーブル、リンクとロ...
-
.net 複数の主キーを設定する方法
-
MDBテーブルへの追加変更を教え...
-
Accessで宛名ラベルに同一宛先...
-
DataGridの中身をDataSetにテー...
-
COBOLのINVALID KEYが理解でき...
おすすめ情報