(環境) 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のソースを追いかけること自体で悪戦苦闘してます。
是非よろしくお願いします。
TRUNCATE を飛ばしましょう。(^^)
ADOを使っているならループしないで
RDS01.Delete adAffectAllChapters 一発で出来ます。
早速のレス有難うございます。
> TRUNCATE を飛ばしましょう。
コーディング上では、どのように記述するのでしょうか?(TRUNCATE Table名?)
> RDS01.Delete adAffectAllChapters 一発で出来ます。
「このコンテキストで操作は許可されていません。」とゆうメッセージが出て
しまうのですが、何らかの設定不足でしょうか?
手取り足取り的な回答を求めてしまい、大変恐縮ですm(__)m
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
すいません返事遅れました。
> Deleteメソッドの引数をadAffectAllChapters以外にするとどうなりますけ?
adAffectGroupなどを試しても同じメッセージが出てしまいます。
ちなみにレコードセットオープンのコーディングが
RDS01.ActiveConnection = Microsoft.jet.OLEDB.4.0
RDS01.CursorLocation = adUseServer
RDS01.CursorType = adOpenKeyset
RDS01.LockType = adLockOptimistic
RDS01.Open = テーブル名変数
となっているのですが、特に関連性はないでしょうか?
そのレコードセットってMDBのテーブルからしゅとくしてるんじゃないんですか?
MDBファイルへの接続部分がみあたりませんが。
す、すいません!大幅に記述漏れ&ミスしてました。
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 = テーブル名変数
でした。
RDS01がSQLじゃなくて単純にテーブル名を指定して、テーブル全体のレコードセットなら、
RDS01を使わずに、CNN01.Execute "DELETE FROM テーブル名"
でいいかと。
> RDS01を使わずに、CNN01.Execute "DELETE FROM テーブル名"
> でいいかと。
で無事うまくいきました。
LESIAさん、度々のレス本当に有難うございました。
ツイート | ![]() |