
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も見ています
-
SQLの速度をあげるには・・・
Visual Basic(VBA)
-
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
-
4
ADOでアクセスのレコードに複数のフィルタをかけるには?
Access(アクセス)
-
5
ACCESSでコントロールソースの変更
Access(アクセス)
-
6
ADOのCursorLocationプロパティ
Visual Basic(VBA)
-
7
ACCESS ADOでupdateが効かない
その他(データベース)
-
8
select文の戻り値を変数に格納したい。
Visual Basic(VBA)
-
9
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
10
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
11
SQL文 複数実行
SQL Server
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
エクセルのテーブルを解除する...
-
手動または分散トランザクショ...
-
VBからMDBのアクセス
-
VBとアクセスでSQL文に変...
-
ACCESS2010 実行時エラー 2766
-
アクセステーブル、リンクとロ...
-
Access2003VBA リンクテーブル...
-
更新時の「同時実行エラー」の対策
-
DataGridViewで変更した値を反...
-
DataGridViewに複数テーブルの...
-
ExcelVBAからAccessMDB内のテー...
-
DataGridViewに画像を表示する方法
-
VB.NET コマンドの使い回しに問...
-
「テーブルに主キーがありませ...
-
[C#] DataGridViewでコンボボッ...
-
DAOでフィールドのデータ型を変...
-
AccessからExcelへエクスポート...
-
Accessのフォームでリス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
VBとアクセスでSQL文に変...
-
SQLを発行とは?クエリの作成と...
-
ExcelVBAからAccessMDB内のテー...
-
[C#] DataGridViewでコンボボッ...
-
エクセルのテーブルを解除する...
-
ACCESS2010 実行時エラー 2766
-
CSVファイルのエクスポートでソ...
-
他のMDBのテーブルに追加したい
-
AccessからExcelへエクスポート...
-
Accessで別mdbのテーブルをコピー
-
手動または分散トランザクショ...
-
★クリスタルレポートの元になる...
-
COBOLのINVALID KEYが理解でき...
-
Accessで宛名ラベルに同一宛先...
-
DataGridViewに複数テーブルの...
-
.net 複数の主キーを設定する方法
-
Excel複数シートをaccessへ一括...
-
アクセステーブル、リンクとロ...
-
VB.NETでのAccessテーブルリンク
おすすめ情報