Master Detail 在明細資料 Insert Post 會自動移動至最後一筆 |
缺席
|
VICSYS
初階會員 發表:21 回覆:64 積分:32 註冊:2002-10-10 發送簡訊給我 |
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
使用 Flat Table (Paradox, dBase等), 原本就是如此的運作規則. TDBNavigator 的 Insert 雖是執行 Insert, 但不管是否有開 Index, 存檔皆是 Append 至檔尾, DBGrid 只是 Memory Stream 中的一段資料, 有開索引便會依 Key 重排.
建議: 要於 Detail 檔增加一欄 ItemNo, 並納入 Primary Index Key, 才能解決此問題. 即使是 SQL Base 的 Table, Insert 插入 TQuery 後, TDBGrid 的資料錄位置也會亂跑, 用 Append 較妥當. 若 Detail 檔每單筆數不多, 也可每次 Post OK 後, 記住 Key 值後再重新 Open 並 Locate, 可能可以符合您的需求. |
VICSYS
初階會員 發表:21 回覆:64 積分:32 註冊:2002-10-10 發送簡訊給我 |
謝謝您的熱心回答!
我不知道為什麼 delphi 要去重新調整明細的位置! 可能是為了要配合 Flat Table 的元件吧! 可是主檔的 INSERT POST 並沒有這個現像! 重新 Open 並 Locate, 這個方式可行! 不過執行成本太高! itemno 的方法可行 ----------------------- 1 2 <- insert 3 post 1 2 <- 會在這裡 2 <- 還是這裡 3 ----------------------- 如果變成 10 20 <- insert , delphi 是 insert 20 之前 30 第一筆沒有問題 10 15 <- 20 但多次之後 11 12 <- 問題又出現了 12 13 ----------------------- itemno 如何設計, 才不會有這個問題! 如果假設使用者一次最多只會輸入 1000 筆, 而原本的明細資料最多 1000筆 1000000 2000000 <- insert 1000000 1250000<- insert 1500000 1000000 1125000 <- insert 1250000 數字要到 2^1000 ? |
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
主檔的 INSERT POST 若無 INDEX, 連續數筆, 也會有此現像的!
M001 M001 M001 M002 M002 M002 M005 <- Insert Here, OK M005 M006 <- Result M003 M006 <- Insert Here M005 M004 M003 M003 M004 M004 除非一定要依 User 的需求將新 Item 插入舊 Item 間, 否則最好用 Append() 的 Method 勿用 Insert(). 設 ItemNo n4 Max 9999 or c4 Max 36^4, ItemNoIns n2 Max 99 or c2 Max 36^2 for 日後 Insert, 或可解決您的問題. |
VICSYS
初階會員 發表:21 回覆:64 積分:32 註冊:2002-10-10 發送簡訊給我 |
測試一下所開發的程式, ClientDataSet的主檔沒有 Index! Post 時並不會上下跑!
另外情況沒有那麼複雜, 如果使用者 Refresh 或 Reopen 時, 順序會依 SQL Server 查詢的順序 (SQL 的查詢結果會依 KEY 來排序, 但又不會讓 Delphi 自行加入 Index) 並不是存檔後的順序要依 Insert 時的樣子! 只是輸入明細時, 不要上下跑! 所以這個 Index 可以用 fkInternalCalc 來完成! ItemNoIns n2 的話, 如前述! 10 10 10 10 11<-Insert 10(inserted) 10*<-Insert 10<- 10* 不知道會在這裡 12 11 11 10<- 或是在這裡 13 12 12 11 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |