
カテ違いならすいません。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
固定電話着信履歴 181 ・・・・...
-
至急お願いいたします! ゆう...
-
823で始まる電話番号
-
不気味な番号
-
電話をかけるのに、違う番号を...
-
if関数を使って割引率をだす
-
モバイルsuicaを持っており、 ...
-
フリーダイヤルのけた数
-
体育の時の4列横隊ってどーやっ...
-
81・・・・・から始まる電話...
-
公衆電話番号
-
水 の化審法、労安法 官報公...
-
エクセル ADO Filterでは一気...
-
受付番号を英語で?
-
覚えやすい番号、良い番号を・・・
-
同じ商品なのに、JANコード...
-
内線番号一覧が分かりづらい
-
TSUTAYAでCDを電話予約したので...
-
一体何を調べているのでしょうか?
-
謎の電話番号
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
823で始まる電話番号
-
固定電話着信履歴 181 ・・・・...
-
至急お願いいたします! ゆう...
-
同じ商品なのに、JANコード...
-
電話をかけるのに、違う番号を...
-
81・・・・・から始まる電話...
-
映画のチケットをスマホで購入...
-
パチンコの抽選入場って、番号...
-
電話番号 +817673467911という...
-
その曲が弾けるようになるまで...
-
フリーダイヤルのけた数
-
if関数を使って割引率をだす
-
エクセル ADO Filterでは一気...
-
不気味な番号
-
携帯番号変える時は、それなり...
-
P/Nとは?
-
1から5までの番号が1つずつ書か...
-
66から始まる番号
-
すべて「ひとつ・・・」ではじ...
-
銀行で番号札は?
おすすめ情報