レコードの一括削除

解決


よこデン  2005-03-09 11:25:03  No: 120127  IP: [192.*.*.*]

(環境) 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 11:39:09  No: 120128  IP: [192.*.*.*]

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

編集 削除
LESIA  2005-03-09 11:41:48  No: 120129  IP: [192.*.*.*]

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

編集 削除
よこデン  2005-03-09 13:26:48  No: 120130  IP: [192.*.*.*]

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

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

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

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

編集 削除
LESIA  2005-03-09 13:52:46  No: 120131  IP: [192.*.*.*]

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-09 15:02:26  No: 120132  IP: [192.*.*.*]

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

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

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

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

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

編集 削除
LESIA  2005-03-09 15:16:55  No: 120133  IP: [192.*.*.*]

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

編集 削除
よこデン  2005-03-09 15:50:05  No: 120134  IP: [192.*.*.*]

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

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-09 16:25:28  No: 120135  IP: [192.*.*.*]

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

編集 削除
よこデン  2005-03-09 17:22:34  No: 120136  IP: [192.*.*.*]

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

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

編集 削除