資料庫記錄刪除後的位置 |
缺席
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位:
這個問題已困擾我很久, 假設一個資料(透過dbgrid顯示出來)有10筆記錄, 我下query1.delete 及資料進行 applyupdate, commit之後, 由於當筆指標已消失, 所以記錄指標會回到第一筆, 因此我做了以下的方式 procedure TForm1.DeleteClick(Sender: TObject); var nowREC: TBookMarkStr; begin nowREC:= Query1.BookMark; Query1.Delete; Query1.ApplyUpdates; Transactions.CommitRetaining; Query1.BookMark:= nowREC; setlength(nowREC,0); end; 此法雖可令刪除當筆記錄後移到原筆的下方, 但又出現一個問題, 如果我是刪除最後一筆時, 此法會移到 Eof指標而造成錯誤, 所以我又改了上面紅色字體的部份 try if (Query1.Eof) and (Query1.Bof) then else Query1.BookMark:= nowREC; except end; setlength(nowREC,0); 如此可以避免刪除最後一筆產生錯誤, 可是在刪除最後一筆後, 記錄指標卻已然回到第一筆 我想要的動作是 無論刪除那一筆, 記錄指標不要回到第一筆, 而是可以停在刪除當筆的下一筆, 如果刪除最後一筆後, 指標仍會停留在最後一筆, 可是我不想使用Last指令, 因為Last會造成資料庫移動記錄很大的負擔, 不知是否還有其他方法? try if (Query1.Eof) and (Query1.Bof) then Query1.Last else Query1.BookMark:= nowREC; except end; setlength(nowREC,0); |
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
===================引 用 文 章=================== 此法我也曾想過, 但並不實際 >> 1.如果只有一筆時, 其實無法這個動作, 所以按此法仍會造成 Eof 或 Bof 的問題 如果先計算紀錄筆數,若只有一筆直接一移到第一筆! >>2.Bookmark 的功能並不像以前dos 的 dbase 一樣會記憶位置, 一旦 commit 後, 記錄在bootmark的變數內的 >>記錄指標就已消減, 所以並無法按我們所想像的可以正常指向我們要的記錄位置 若是紀錄KEY欄位的條件呢?自己用變數紀錄,不用Bookmark 變數不知道是否可以少掉一些困擾!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
P.D前輩:
其實我對資料庫的議題很感興趣,但是Delphi對很多資料庫都沒有提供原生的良好支援,像我現在還是用ADO來處理我的資料庫問題, 畢竟元件盤上找的到! 至於會不會導致資料庫緩慢,我是覺得值得一試,或許也是個解決方案,畢竟有問題才有我們存在的價值! 至於百萬筆的資料庫是否值得這樣作, 我有一個個人的經驗,一般使用者對系統的使用經驗,是否能貼近於日常相似實際的作業,將決定我們系統的價值與友善度!
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
稱呼前輩不敢當, 我十分認同g兄的看法, 的確一套軟體寫的再完美再好, 叫好不叫痤, 不友善, 不親和, 它仍然是一個失敗的作品, 不過不好意思, 無法觸犯您的想法, 我原來的想法只是希望刪除記錄在commit之後不會讓記錄又回到第一筆就可以了, 而以我po上來的做法即可以達到目的, 效能也不差, 看看是否還有更好更合理的做法值得大家來討論, 因為如果要先計算筆數用count()來算會產生一個query的資源, 也會損耗n倍時間, 或用loop來找出是否only one, 會造成該記錄指標不斷移動, 很有可能造成移來移去時最後刪掉不該刪的記錄, 其實風險性很高,
其實我對於sql的bookmark一直很垢病, 因為它似乎不是我們想像中那麼容易掌控(不像dbase中的recno那般簡單明白), 不過討論到這邊有些離題了, 是否還有其他更好的想法, 歡迎大家一起來討論! 謝謝! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |