關於DBGrid & DataControl |
尚未結案
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 關於DBGrid & DataControl DBGrid & DataControl均來自DataSource 如果希望修改DataControl之內容時並不是真正存入,而是按下如存檔時才全部依起存入資料庫 又因未存檔,所以希望在DBGrid移動時DataControl之內容則須不一定是資料庫內容,有可能是上筆修改之內容 是否用CachedUpdate方式,可否與以指教基本上你只要使用Query物件就可以了 1.就一般localdatabase(DB,DBF) TQuery TUpdateSQL TDBgrid, 修改時其實資料確實有回到 資料庫, 且dbgrid內存的也是修改的記錄 但這個資料庫是在buffer中, cacheupdate, requestlive = true 不是重點(為false是readonly), 而要儲存時, 重點在這兩行指令, 才能令資料由buffer回到dbf中 query1.UpdateRecord; query1.CommitUpdates; 而其他SQL資料庫系統也大同小異, 但如果你用Table物件, 那沒有辦法, 因為TTable是直接存入dbf中 |
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
query1.UpdateRecord; & query1.CommitUpdates;是最後確定儲存
cacheupdate, requestlive = true是暫時存放在buffer中
比方說
當DBGrid在第一筆時DBCheckBox取出之值為True,使用者將其修改為False,
當跳離第一筆後再回到第一筆,且此時尚未真正存檔,但再回到DBGrid之第一筆時,其DBCheckBox顯示之資料要如何才是剛剛修改之值(False),
我得到的結果都會又從資料庫取得原值(True)?
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: query1.UpdateRecord; & query1.CommitUpdates;是最後確定儲存 cacheupdate, requestlive = true是暫時存放在buffer中 比方說 當DBGrid在第一筆時DBCheckBox取出之值為True,使用者將其修改為False, 當跳離第一筆後再回到第一筆,且此時尚未真正存檔,但再回到DBGrid之第一筆時,其DBCheckBox顯示之資料要如何才是剛剛修改之值(False), 我得到的結果都會又從資料庫取得原值(True)?我試不出來,檢查看看是否有程式重新取出資料庫 Data. /* Free 和 Create 一樣重要 */ |
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
感謝各位先進的不吝指教
有二資料表Data1,Data2
Data1之欄位分別為F1_1,F1_2,F1_3....
Data2之欄位分別為F2_1,F2_2,F2_3....
我加入了以下
DBGrid1之DataSource=Data1DataSource
Data1Query--(DatabaseName)-->DB.Data1 (Access)
Data2Query--(DatabaseName)-->DB.Data2 (Access)
Data1DataSource--(DataSet)-->Data1Query
Data2DataSource--(DataSet)-->Data2Query
RequestLive & CachedUpdates 均= True; DataControl:
DBCheckBox1-1=F1_1, DBCheckBox1-2=F1_2....
DBCheckBox2-1=F2_1, DBCheckBox2-2=F2_2.... 為了顯示 DBCheckBox2-1等相關資訊故加了以下(onDataChange Event)
procedure TFMSaleP.Data1DataSourceDataChange(Sender: TObject;
Field: TField);
Begin
id := Data1Query.FieldByName('F1_1').AsString; //取得指標位置 Data2Query.SQL.Clear;
Data2Query.SQL.Add('Select * from Data2 ');
Data2Query.SQL.Add('Where F2_1 = ''' id ''' ');
Data2Query.SQL.Add('order by F2_1');
Data2Query.Close;
Data2Query.Open;
End;
但這樣有個問題就是每次Data2Query都會重新開啟資料表,DBCheckBox2-1便不是暫存資料,而是資料庫之資料
要如何才能取出該關聯之資料表之暫存資料
註:DBCheckBox1-1也就是Data1Query均無誤,先前測試以為有問題,原來是來自Data2的問題
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 感謝各位先進的不吝指教 有二資料表Data1,Data2 Data1之欄位分別為F1_1,F1_2,F1_3.... Data2之欄位分別為F2_1,F2_2,F2_3.... 我加入了以下 DBGrid1之DataSource=Data1DataSource Data1Query--(DatabaseName)-->DB.Data1 (Access) Data2Query--(DatabaseName)-->DB.Data2 (Access) Data1DataSource--(DataSet)-->Data1Query Data2DataSource--(DataSet)-->Data2Query RequestLive & CachedUpdates 均= True; DataControl: DBCheckBox1-1=F1_1, DBCheckBox1-2=F1_2.... DBCheckBox2-1=F2_1, DBCheckBox2-2=F2_2.... 為了顯示 DBCheckBox2-1等相關資訊故加了以下(onDataChange Event) procedure TFMSaleP.Data1DataSourceDataChange(Sender: TObject; Field: TField); Begin id := Data1Query.FieldByName('F1_1').AsString; //取得指標位置 Data2Query.SQL.Clear; Data2Query.SQL.Add('Select * from Data2 '); Data2Query.SQL.Add('Where F2_1 = ''' id ''' '); Data2Query.SQL.Add('order by F2_1'); Data2Query.Close; Data2Query.Open; End; 但這樣有個問題就是每次Data2Query都會重新開啟資料表,DBCheckBox2-1便不是暫存資料,而是資料庫之資料 要如何才能取出該關聯之資料表之暫存資料 註:DBCheckBox1-1也就是Data1Query均無誤,先前測試以為有問題,原來是來自Data2的問題當DATA2 CLOSE 自然 BUFFER資料即消失, 再OPEN一定回到原來的內容, 依你的 需求要達到功能, 基本上你要再加一個DATA3取代DATA2, 亦即把DATA3視作DATA2 的BUFFER DATA, 修改時將值確實存到DATA3, 當真正要儲存時, 再把 DATA3的 資料轉到 DATA2, 希望你可以看的懂! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |