全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2265
推到 Plurk!
推到 Facebook!

Cannot insert duplicate key in object ..........

缺席
0316
一般會員


發表:32
回覆:19
積分:10
註冊:2002-07-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-30 10:17:42 IP:61.220.xxx.xxx 未訂閱
假設查詢一張進貨單(Master-Detail格式), TDBGrid 有兩筆資料,例: 進貨單號 序號 商品編號 品名規格 (進貨單號=隱藏欄位) 91123001 001 4701123409090 大溪豆乾 ....... 91123001 002 4701123409091 大溪蜜餞 ....... 今修改為(在第二筆之前插入一筆)其畫面如下 91123001 001 4701123409090 大溪豆乾 ....... 91123001 002 4701000091091 達新牌雨衣....... 91123001 003 4701123409091 大溪蜜餞 ....... 存檔後既出現鍵值重覆的問題..., 如果是新增在第三筆既不會有問題, 如下... 91123001 001 4701123409090 大溪豆乾 ....... 91123001 002 4701123409091 大溪蜜餞 ....... 91123001 003 4701000091091 達新牌雨衣....... P.S. Primary Key = 進貨單號 序號 TDBGrid(來源兩個Tables)所以我用TQuery TUpdateSQL QueryDtl.RequestLive := True; QueryDtl.CachedUpdates := True; 我想有可能是原序號第二筆002因作insert, 我把序號重排後它變成第三筆003, 但仍在Bufffer裡, 新增那一筆序號變成002, 所以才會造成鍵值重覆的問題, 各位看官大人不知了解否,如果我把新增的序號排在最後就不會有上述的問題出 現,但這樣子等於沒有差入的功能,煩請各位前輩不吝告知,謝謝! 泓遠
------
泓遠
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-30 11:32:09 IP:211.23.xxx.xxx 未訂閱
引言: 假設查詢一張進貨單(Master-Detail格式), TDBGrid 有兩筆資料,例: 進貨單號 序號 商品編號 品名規格 (進貨單號=隱藏欄位) 91123001 001 4701123409090 大溪豆乾 ....... 91123001 002 4701123409091 大溪蜜餞 ....... 今修改為(在第二筆之前插入一筆)其畫面如下 91123001 001 4701123409090 大溪豆乾 ....... 91123001 002 4701000091091 達新牌雨衣....... 91123001 003 4701123409091 大溪蜜餞 ....... 存檔後既出現鍵值重覆的問題..., 如果是新增在第三筆既不會有問題, 如下... 91123001 001 4701123409090 大溪豆乾 ....... 91123001 002 4701123409091 大溪蜜餞 ....... 91123001 003 4701000091091 達新牌雨衣....... P.S. Primary Key = 進貨單號 序號 TDBGrid(來源兩個Tables)所以我用TQuery TUpdateSQL QueryDtl.RequestLive := True; QueryDtl.CachedUpdates := True; 我想有可能是原序號第二筆002因作insert, 我把序號重排後它變成第三筆003, 但仍在Bufffer裡, 新增那一筆序號變成002, 所以才會造成鍵值重覆的問題, 各位看官大人不知了解否,如果我把新增的序號排在最後就不會有上述的問題出 現,但這樣子等於沒有差入的功能,煩請各位前輩不吝告知,謝謝! 泓遠
你應該在插入002以前先將原來的002改為003 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-30 11:43:49 IP:61.220.xxx.xxx 未訂閱
分別就insert,append來解釋 insert <----新增一筆資料在游標之前 append <----新增一筆資料在最後 存檔之後會從新排序 差別在於新增資料時所在位置不同而已 假如你insert一筆資料 但序號為003是不會有問題 可是如果insert一筆資料 但序號為001還是會有鍵值重複的問題 除非你要先把之前的序號改掉 後面的序號才可用之前的序號 但除非有特殊原因否則這樣做會很麻煩 因為你每INSERT一筆 就要重新修改序號 除非你不用INSERT 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
0316
一般會員


發表:32
回覆:19
積分:10
註冊:2002-07-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-30 14:13:06 IP:61.220.xxx.xxx 未訂閱
我會在TDBgrid 新增或刪除時重排序號, 從第一筆依序排序, 也試過從最後一筆 排上來, 在TDBGrid裡面無論如何操做都沒問題, 也許刪除數筆再新增數筆或是 修改等等, 但等到編輯完畢按下存檔DM.QueryDtl.ApplyUpdates, 有時就會出 現鍵值重覆的問題, 我想是不是假設原本這張進貨單號在資料庫已存在兩筆, 序號001&002, 但當我在第二筆之前插入一筆, 因我會把序號重編, 已至於原本 序號002變003(TDBGrid標示此筆為Modified), 而新增的那一筆序號為002 (TDBGrid標示此筆為Append), 此時資料還在Buffer裡所以沒問題, 但當我執行 .ApplyUpdates 時寫入資料庫, 當寫入第二筆(此筆已標示為新增)故SQL會做 Insert, 但原本已存在資料庫,序號為002那筆尚未被更新, 故會出現鍵值重覆的 問題, 照邏輯除此之外我想不出有更合理的解釋, 謝謝大家賜教 泓遠
------
泓遠
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-30 14:57:40 IP:61.220.xxx.xxx 未訂閱
引言: 我會在TDBgrid 新增或刪除時重排序號, 從第一筆依序排序, 也試過從最後一筆 排上來, 在TDBGrid裡面無論如何操做都沒問題, 也許刪除數筆再新增數筆或是 修改等等, 但等到編輯完畢按下存檔DM.QueryDtl.ApplyUpdates, 有時就會出 現鍵值重覆的問題, 我想是不是假設原本這張進貨單號在資料庫已存在兩筆, 序號001&002, 但當我在第二筆之前插入一筆, 因我會把序號重編, 已至於原本 序號002變003(TDBGrid標示此筆為Modified), 而新增的那一筆序號為002 (TDBGrid標示此筆為Append), 此時資料還在Buffer裡所以沒問題, 但當我執行 .ApplyUpdates 時寫入資料庫, 當寫入第二筆(此筆已標示為新增)故SQL會做 Insert, 但原本已存在資料庫,序號為002那筆尚未被更新, 故會出現鍵值重覆的 問題, 照邏輯除此之外我想不出有更合理的解釋, 謝謝大家賜教 泓遠
你的想法沒有錯 那你既然知道這樣 你就要改變順序ㄚ 先INSERT資料 再更新序號就會發生鍵值重複的問題 所以 先更新序號 再INSERT資料就沒問題 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
系統時間:2024-05-03 22:58:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!