アプリ版:「スタンプのみでお礼する」機能のリリースについて

初歩的な質問かもしれませんが・・・
ACCESS2003VBAでADOを用いて削除を実行しようとしているのですがエラー(エラーは「オーバーフローしました」です。)が出て実行できません。
ソースは以下の通りです。

Dim strSQL As String
Dim rs As New ADODB.Recordset

Set cn = CurrentProject.Connection
strSQL = " DELETE FROM D_TB"
rs.Open strSQL, cn, , adOpenStatic, adLockOptimistic       '←ここでエラー
Do Until rs.EOF
rs.Delete
rs.MoveNext
Loop
rs.Close
cn.Close

どこがおかしいのでしょうか?
大変困っています。教えてください。よろしくお願いいたします。

A 回答 (3件)

私の場合はdb2.mdbに生徒Bと言うテーブルがあります。


そのフィールドの1つに県と言うフィールドがあります。
県フィールドが東京と言うレコードを削除します。
下記でうまく行きましたから参考に。
Sub test14()
Dim strSQL As String
Dim cn As ADODB.Connection
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurDir & "\" & "\db2.mdb"
Dim rs As New ADODB.Recordset
strSQL = "DELETE FROM 生徒B WHERE 県='東京';"
rs.Open strSQL, cn, adOpenStatic, adLockOptimistic

'---確認
rs.Open "生徒B", cn, adOpenStatic, adLockPessimistic
Do Until rs.EOF
MsgBox rs.Fields(3)
rs.MoveNext
Loop
'---
rs.Close
Set cn = Nothing
End Sub
ーーー
#1、#2のご回答などもよく読んで勉強してください。
cnとrsや
rs.Open strSQL・・

rs.Open "生徒B",
などについて
違いの迷い(不十分な理解)があるようです。
    • good
    • 0

rsはレコードセットで取ってるのですよね


ソースを見る限りレコードを読み込んで削除する記述ですが
SQLはDELETE ?
単純に直すならSQLを "SELECT * FROM D_TB" と変更

でもDELETEならSQL実行でrsを確保する必要は無いと思います
Set cn = CurrentProject.Connection
strSQL = " DELETE FROM D_TB"
cn.Execute strSQL
Set cn = Nothing
だけで全レコード削除されるはずが
    • good
    • 0

loopで1レコードずつ削除したいなら、


strSQL = "SELECT * FROM D_TB"
として、RS.DELETEのあとにRS.UPDATEをいれるべき。


strSQL = "DELETE FROM D_TB"
を使いたいなら、

Set cn = CurrentProject.Connection
strSQL = " DELETE FROM D_TB"
CN.EXECUTE STRSQL
で事は足りるはず。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!