
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGridViewに複数テーブルの...
-
手動または分散トランザクショ...
-
ワークテーブルの作成について
-
Accessで別mdbのテーブルをコピー
-
COBOLのINVALID KEYが理解でき...
-
Access2007でアプリケーション...
-
VB.NET データセットのEXCELへ出力
-
オートナンバー型を変換したい
-
VBとアクセスでSQL文に変...
-
AccessからExcelへエクスポート...
-
Excel複数シートをaccessへ一括...
-
任意の周波数の正弦波(サイン...
-
C#で異なる環境のテーブル名をS...
-
オラクルデータベースへの更新方法
-
「テーブルに主キーがありませ...
-
CSVファイルのエクスポートでソ...
-
アクセステーブル、リンクとロ...
-
VB.NETでのAccessテーブルリンク
-
ACCESS2010 実行時エラー 2766
-
VBA 変数名に変数を使用したい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
VBとアクセスでSQL文に変...
-
他のMDBのテーブルに追加したい
-
手動または分散トランザクショ...
-
エクセルのテーブルを解除する...
-
COBOLのINVALID KEYが理解でき...
-
AccessからExcelへエクスポート...
-
ExcelVBAからAccessMDB内のテー...
-
CSVファイルのエクスポートでソ...
-
DAOの作成単位について
-
ワークテーブルの作成について
-
Accessで別mdbのテーブルをコピー
-
Access2007でアプリケーション...
-
DataGridViewに複数テーブルの...
-
VB.NETでのAccessテーブルリンク
-
ACCESS2010 実行時エラー 2766
-
Excel複数シートをaccessへ一括...
-
[C#] DataGridViewでコンボボッ...
-
Accessでテーブルのデータのみ...
おすすめ情報