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

insert多筆後(已先塞值,尚未post),如何更改其中一個欄位

尚未結案
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-04 16:28:34 IP:221.169.xxx.xxx 未訂閱
其中fileid及comment是組合主鍵 query.insert query.fieldbyname('fileid').asstring:='a01'; query.fieldbyname('comment').asstring:='help'; query.insert query.fieldbyname('fileid').asstring:='a01'; query.fieldbyname('comment').asstring:='abc'; 若我再insert多筆後, 想更改 先前所有insert資料的fileid欄位 成 'a02' 不知道要如何寫
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-04 16:39:04 IP:61.222.xxx.xxx 未訂閱
事實上在第二次Insert 就已經把第一次的Insert 資料給POST 出去。 只能事後在 query.Edit
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-04 17:02:31 IP:221.169.xxx.xxx 未訂閱
wameng兄 你說的 ------- 事實上在第二次Insert 就已經把第一次的Insert 資料給POST 出去。 --------- 應該還沒有post吧 要下post,才會真正寫到資料庫
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-04 18:07:33 IP:61.222.xxx.xxx 未訂閱
您查詢一下 Query.insert 中的源碼    procedure TDataSet.Insert; var   Buffer: PChar;   OldCurrent: TBookmarkStr; begin   BeginInsertAppend;   OldCurrent := Bookmark;   MoveBuffer(FRecordCount, FActiveRecord);   Buffer := ActiveBuffer;   InitRecord(Buffer);   if FRecordCount = 0 then     SetBookmarkFlag(Buffer, bfBOF) else     SetBookmarkData(Buffer, Pointer(OldCurrent));   if FRecordCount < FBufferCount then Inc(FRecordCount);   InternalInsert;   EndInsertAppend; end;    在  procedure TDataSet.BeginInsertAppend; begin   CheckBrowseMode;   CheckCanModify;   DoBeforeInsert;   CheckParentState;   DoBeforeScroll; end;    中已用CheckBrowseMode  在此函數中   CheckActive;   DataEvent(deCheckBrowseMode, 0);   case State of     dsEdit, dsInsert:       begin         UpdateRecord;         if Modified then Post else Cancel; end; dsSetKey: Post; end; end;
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-04 18:19:00 IP:221.169.xxx.xxx 未訂閱
但是實際上 ,尚未寫回去資料庫 不是嗎 ?(我查過 資料庫了) (對啦,我是用client/server機制的,忘了說) 真的不能再更改 我說的fileid嗎 ? 麻煩大大了
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-05 08:43:24 IP:61.218.xxx.xxx 未訂閱
hi,seedbcc: 如果你是要在client端整個存好資料才一次寫入資料庫的話,那麼建議你可以用TClientDataSet.把資料拉到TClientDataSet裡編輯,確定之後再整個用ApplyUpdate回資料庫去.當然,TClientDataSet也是一次只允許編輯一筆資料,如果你修改的話,也是要用Edit來修改,最後post.
likush
高階會員


發表:5
回覆:235
積分:103
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-05 10:08:01 IP:220.134.xxx.xxx 未訂閱
個人問題,依您的需求有二種作法, 1將值取出放至TSTRINGGRID中先作修改,改完後再統一作更新上去。但如果需作更新或刪除筆數等動作,則需您再以程式去作控制。 2如果依你目前的程式作法而言,可先於更動後再一次update所有的A01值。 ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-05 10:37:05 IP:221.169.xxx.xxx 未訂閱
感謝各位的回答 小弟要改那個欄位 主要是因為 怕寫去會重複key 所以最後,要去再抓一次key值 1 統一更新後 才寫回去 不過 照最後一位大哥的說法 用update ,是不是指寫回去後, 才update 似乎不符合我的寫法
change.jian
版主


發表:29
回覆:620
積分:439
註冊:2003-06-02

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-05 12:16:10 IP:61.218.xxx.xxx 未訂閱
hi,seedbcc: 由你的問題來看,你是要解決在輸入資料時,避免欄位Key值重覆.所在會想要在最後一次寫入時,再去讀取Key值加1.但如果你的系統是c/s的話,那這裡就要考慮一個問題: 有沒有可能在你最後去讀取Key值回來加1後,另外有一個使用者剛好馬上新增了一筆資料回資料庫,這時你讀回來的值不就是不正確了嗎? 所以,這裡建議你兩種做法: 1.如果Key值可以由使用者自行指定,那麼程式就忠實反應寫入資料庫的結果,用try-except-end包住寫入資料庫的程式區段,當Key值重覆時,就告訴操作者資料重覆. 2.如果Key值要由程式產生,那就在後端資料庫去產生.不要由前端的Delphi程式產生.後端資料庫產生的方法由很多,例如MS-SQL的設定欄位為identity,Oracle的sequence.或者建個trigger,在insert時去產生該欄位的值... 給您參考
likush
高階會員


發表:5
回覆:235
積分:103
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-10-05 14:30:12 IP:220.134.xxx.xxx 未訂閱
不清楚你的問題需求為何? 您想更改所有insert資料的某欄位值成 'a02',這樣在資料方面一定會重覆啊?如果該欄位不可重覆的話,相信C兄已給您數種的解答作法了。抱歉因為看到您發言的內容,所以提供了無用的建議,我想或許您在下次發問問題時能更詳述需求的作法或問題點時,對於站上其他先進提供解答時能更符合您的需求。 ========================= 讀萬卷書~不如來K.TOP走一遭 =========================
seedbcc
高階會員


發表:232
回覆:272
積分:105
註冊:2003-12-10

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-10-05 15:06:37 IP:221.169.xxx.xxx 未訂閱
謝謝各位先進 的回答 小弟發問的問題 只是我問題中的一小部份 所以可能會讓各位無法理解 問題點 下次發問的時候,我會詳述清楚些 再次謝謝各位
系統時間:2024-06-26 15:56:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!