insert多筆後(已先塞值,尚未post),如何更改其中一個欄位 |
尚未結案
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
其中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 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
您查詢一下 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 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
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 發送簡訊給我 |
|
seedbcc
高階會員 發表:232 回覆:272 積分:105 註冊:2003-12-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |