レコードの一括削除

解決


よこデン  2005-03-09 20:25:03  No: 120127

(環境) W2K,VB6.0,Access(mdb)
で作成されたシステム内のある処理で「レコードセット内の全レコードを
一括削除する」処理を見直してます。実際の削除部のコーディングは下記
のようになっていたのですが

If RDS01.RecordCount > 0 Then
   RDS01.Requery
   RDS01.MoveFirst
   Do Until RDS01.EOF = True
      RDS01.Delete
      RDS01.MoveNext
   Loop
End If

今回、エラーで落ちる場合(レコード件数に左右される?)があると判明
したため、修正しようとしています。そこで…
コーディング(ロジック)上でのアドバイスや、もっとてっとり早い方法
が別にあれば、助言いただけないでしょうか?

"VB.NET"から始めた初級〜中級者ばかりな事に加え当時の開発メンバー
もいない状況で、VB6.0のソースを追いかけること自体で悪戦苦闘してます。
是非よろしくお願いします。


じゃんぬねっと  URL  2005-03-09 20:39:09  No: 120128

TRUNCATE を飛ばしましょう。(^^)


LESIA  2005-03-09 20:41:48  No: 120129

ADOを使っているならループしないで
RDS01.Delete adAffectAllChapters 一発で出来ます。


よこデン  2005-03-09 22:26:48  No: 120130

早速のレス有難うございます。

> TRUNCATE を飛ばしましょう。
コーディング上では、どのように記述するのでしょうか?(TRUNCATE Table名?)

> RDS01.Delete adAffectAllChapters 一発で出来ます。
「このコンテキストで操作は許可されていません。」とゆうメッセージが出て
しまうのですが、何らかの設定不足でしょうか?

手取り足取り的な回答を求めてしまい、大変恐縮ですm(__)m


LESIA  2005-03-09 22:52:46  No: 120131

TRUNCATE TABLEは、OracleやSQL Serverのコマンドなので、Accessでは使えないです。

Deleteメソッドの引数をadAffectAllChapters以外にするとどうなりますけ?
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpado260/htm/mdcstaffectenum.asp


よこデン  2005-03-10 00:02:26  No: 120132

すいません返事遅れました。

> Deleteメソッドの引数をadAffectAllChapters以外にするとどうなりますけ?
adAffectGroupなどを試しても同じメッセージが出てしまいます。

ちなみにレコードセットオープンのコーディングが

RDS01.ActiveConnection = Microsoft.jet.OLEDB.4.0
RDS01.CursorLocation = adUseServer
RDS01.CursorType = adOpenKeyset
RDS01.LockType = adLockOptimistic
RDS01.Open = テーブル名変数

となっているのですが、特に関連性はないでしょうか?


LESIA  2005-03-10 00:16:55  No: 120133

そのレコードセットってMDBのテーブルからしゅとくしてるんじゃないんですか?
MDBファイルへの接続部分がみあたりませんが。


よこデン  2005-03-10 00:50:05  No: 120134

す、すいません!大幅に記述漏れ&ミスしてました。

Set CNN01 = New ADODB.Connection
Set RDS01 = New ADODB.Recordset
'
CNN01.Provider = Microsoft.jet.OLEDB.4.0
CNN01.Open パス名等変数
'
RDS01.ActiveConnection = CNN01
RDS01.CursorLocation = adUseServer
RDS01.CursorType = adOpenKeyset
RDS01.LockType = adLockOptimistic
RDS01.Open = テーブル名変数
でした。


LESIA  2005-03-10 01:25:28  No: 120135

RDS01がSQLじゃなくて単純にテーブル名を指定して、テーブル全体のレコードセットなら、
RDS01を使わずに、CNN01.Execute "DELETE FROM テーブル名"
でいいかと。


よこデン  2005-03-10 02:22:34  No: 120136

> RDS01を使わずに、CNN01.Execute "DELETE FROM テーブル名"
> でいいかと。
で無事うまくいきました。

LESIAさん、度々のレス本当に有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加