
カテ違いならすいません。
Tメインテーブルの番号フィールド(主キーではない為重複がある)に該当の番号があればそのレコードを削除するアクセスVBAを考えているのですが行き詰っています。
Public ADOrs As ADODB.Recordset
Public cn As ADODB.Connection
****************************************************
Sub 削除1()
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Name
番号 = Forms("フォーム1").Controls("番号").Value
Set ADOrs = New ADODB.Recordset
ADOrs.Open "SELECT * FROM Tメイン", cn, adOpenKeyset, adLockOptimistic
ADOrs.Filter = "番号 = '" & 番号 & "'"
ADOrs.Delete
ADOrs.Update
ADOrs.Close: Set ADOrs = Nothing
cn.Close: Set cn = Nothing
End Sub
****************************************************
↑これで
もし、Tメインの番号フィールドに該当の番号が3レコート゛あれば全部一気にDelete出来るわけではないのですか?
一気にフィルタにかかっているレコードを削除できると思ってたのですが1レコート゛ずつのようです。
しかし
****************************************************
Sub 削除2()
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Name
番号 = Forms("フォーム1").Controls("番号").Value
Set ADOrs = New ADODB.Recordset
ADOrs.Open "SELECT * FROM Tメイン", cn, adOpenKeyset, adLockOptimistic
ADOrs.Filter = "番号 = '" & 番号 & "'"
Do While ADOrs.RecordCount <> 0
'あるなら
ADOrs.Delete
ADOrs.Update '保存
Loop
ADOrs.Close: Set ADOrs = Nothing
cn.Close: Set cn = Nothing
End Sub
****************************************************
としたら
実行時エラー '-2147217887 (80040e21)':
複数ステップの OLE DB の操作でエラーが発生しました。各 OLE DB の状態の値を確認してください。作業は終了しませんでした。
のエラーになりました。
なので、
****************************************************
Sub 削除3()
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Name
番号 = Forms("フォーム1").Controls("番号").Value
Set ADOrs = New ADODB.Recordset
ADOrs.Open "SELECT * FROM Tメイン", cn, adOpenKeyset, adLockOptimistic
ADOrs.Filter = "番号 = '" & 番号 & "'"
Do While ADOrs.RecordCount <> 0
'あるなら
ADOrs.Delete
ADOrs.Update '保存
ADOrs.Close: Set ADOrs = Nothing
Set ADOrs = New ADODB.Recordset
ADOrs.Open "SELECT * FROM Tメイン", cn, adOpenKeyset, adLockOptimistic
ADOrs.Filter = "番号 = '" & 番号 & "'"
Loop
ADOrs.Close: Set ADOrs = Nothing
cn.Close: Set cn = Nothing
End Sub
****************************************************
と言うように1レコートずつまわしていくしかないのでしょうか?
削除3はプログラムとして少し変かな?と思うのですが
どうでしょう?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
Deleteメソッドはレコード単位での削除ですね
Sub 削除1()
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & CurrentProject.Name
番号 = Forms("フォーム1").Controls("番号").Value
Set ADOrs = New ADODB.Recordset
ADOrs.Open "SELECT * FROM Tメイン", cn, adOpenKeyset, adLockOptimistic
ADOrs.Filter = "番号 = '" & 番号 & "'"
on error resume Next
' 最初の要素へ移動
ADOrs.MoveFirst
On Error Goto 0
' 要素がある間ループする
do until ADOrs.EOF
ADOrs.Delete
' カレントレコードを変更する
ADOrs.MoveFirst
Loop
ADOrs.Close: Set ADOrs = Nothing
cn.Close: Set cn = Nothing
End Sub
といった具合でしょう
番号で特定した行を削除するなら
cn.Execute "DELETE FROM Tメイン WHERE 番号='" & 番号 & "'"
といった具合にすれば 一度に削除できます
ありがとうございます!!!
「cn.Execute "DELETE FROM Tメイン WHERE 番号='" & 番号 & "'"」
これを使うことにしました!
質問してよかったです!
大変参考になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
映画のチケットをスマホで購入...
-
823で始まる電話番号
-
至急お願いいたします! ゆう...
-
固定電話着信履歴 181 ・・・・...
-
電話をかけるのに、違う番号を...
-
81・・・・・から始まる電話...
-
P/Nとは?
-
FAX番号の英語表記とは?
-
パチンコの抽選入場って、番号...
-
エクセル ADO Filterでは一気...
-
AccessのIIf関数でエラーが出...
-
携帯番号変える時は、それなり...
-
0066から始まる番号
-
フリーダイヤルのけた数
-
電話番号の変更。
-
CPU - E0, R0, G0, ...とは何?
-
MS Wordで図表番号を1から振り...
-
受付番号を英語で?
-
同じ商品なのに、JANコード...
-
昔のスマホのLINEからプッシュ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
999で始まる電話番号から着信が...
-
電話をかけるのに、違う番号を...
-
81・・・・・から始まる電話...
-
固定電話着信履歴 181 ・・・・...
-
至急お願いいたします! ゆう...
-
同じ商品なのに、JANコード...
-
体育の時の4列横隊ってどーやっ...
-
823で始まる電話番号
-
フリーダイヤルのけた数
-
電話番号 +817673467911という...
-
if関数を使って割引率をだす
-
すべて「ひとつ・・・」ではじ...
-
pcでGoogleアカウントを作ろう...
-
携帯番号変える時は、それなり...
-
1から5までの番号が1つずつ書か...
-
昔のスマホのLINEからプッシュ...
-
内線番号一覧が分かりづらい
-
不気味な番号
-
P/Nとは?
-
FAX番号の英語表記とは?
おすすめ情報