線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:934
推到 Plurk!
推到 Facebook!

一個ADOdataset 問題

尚未結案
lvluyang
一般會員


發表:18
回覆:9
積分:5
註冊:2004-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-30 11:52:01 IP:218.247.xxx.xxx 未訂閱
問題是這樣子的﹕ 我用兩個ADODATASET做主從表的連接﹐主表連的是adodataset1,從表連接的是adodataset2 關聯的字段為serialNO,在做刪除主表的記錄時對應的從表記錄也應該被刪除﹐我是先刪除從表然后再刪除主表的﹐在刪除從表的記錄后資料庫里還是存在一條記錄﹐那條記錄僅僅主從表的關聯字SerialNO字段有值,其它的為空﹐我中在主表的adodataset1的beforedelete的事件里寫代碼刪除對應從表記錄的﹕ var i:integer; begin with dm.ADODataSet2 do if not isempty then begin first; for i :=0 to RecordCount-1 do begin delete; edit; post; end; end; 為什么刪除不干淨呢﹖﹐請問在做主從表的刪除動作應該怎樣寫﹖謝謝﹗
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-30 12:02:35 IP:210.65.xxx.xxx 未訂閱
Hi lvluyang,    改成這樣看看:
begin
    with dm.ADODataSet2 do
        begin
            first;
            while not eof do
                begin
                    delete;
                    post;
                end;
        end;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-30 16:27:23 IP:219.133.xxx.xxx 未訂閱
引言: 問題是這樣子的﹕ 我用兩個ADODATASET做主從表的連接﹐主表連的是adodataset1,從表連接的是adodataset2 關聯的字段為serialNO,在做刪除主表的記錄時對應的從表記錄也應該被刪除﹐我是先刪除從表然后再刪除主表的﹐在刪除從表的記錄后資料庫里還是存在一條記錄﹐那條記錄僅僅主從表的關聯字SerialNO字段有值,其它的為空﹐我中在主表的adodataset1的beforedelete的事件里寫代碼刪除對應從表記錄的﹕ var i:integer; begin with dm.ADODataSet2 do if not isempty then begin first; for i :=0 to RecordCount-1 do begin delete; edit; post; end; end; 為什么刪除不干淨呢﹖﹐請問在做主從表的刪除動作應該怎樣寫﹖謝謝﹗
你注意这句:for i :=0 to RecordCount-1 do 因为你在删除,RecordCount一直在变!最后RecordCount变成1的时候,也就是你还有一条的时候,RecordCount-1=0,for循环就停止了。 FishMan的说法才是正解。通常使用 TDataSet及其派生类,要遍历所有记录的话,一般都这样写:
  DataSet1.First;
  while not DataSet1.Eof do
  begin
    //do something...
    DataSet1.Next; //如果不是删除的话,一定要这一句!否则永远走不出这个 while 了。
  end;
lvluyang
一般會員


發表:18
回覆:9
積分:5
註冊:2004-09-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-30 19:10:35 IP:218.247.xxx.xxx 未訂閱
樓上的兄弟提供的while循環刪除方法我早就試過了﹐但還是不行﹐我現在仔細看了ADODATASET的方法突然發現在如下方法﹐提供給大家﹐我已經能實現了 with dm.TestDataSet2 do if NOT ISEMPTY then begin first; while not eof do begin DeleteRecords(arCurrent); end; end; 謝謝大家的關心﹗
zhongguoren1997
一般會員


發表:9
回覆:10
積分:3
註冊:2004-09-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-04 08:19:54 IP:219.134.xxx.xxx 未訂閱
其實對于主從表的問題﹐可以在數據庫設計時就做好表一級的主從關系﹐(數據庫中也叫定義約束)這樣只要刪除主表中的記錄﹐從表中的關聯記錄也就強制刪除了。這樣又快又好。 大家好才是真的好
------
大家好才是真的好
系統時間:2024-07-01 9:34:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!