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

關於DBGrid & DataControl

尚未結案
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-05 00:27:44 IP:61.59.xxx.xxx 未訂閱
關於DBGrid & DataControl DBGrid & DataControl均來自DataSource 如果希望修改DataControl之內容時並不是真正存入,而是按下如存檔時才全部依起存入資料庫 又因未存檔,所以希望在DBGrid移動時DataControl之內容則須不一定是資料庫內容,有可能是上筆修改之內容 是否用CachedUpdate方式,可否與以指教
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-05 00:59:44 IP:61.66.xxx.xxx 未訂閱
引言: 關於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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-05 02:45:33 IP:61.59.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-05 09:30:45 IP:61.220.xxx.xxx 未訂閱
可以先用query1.post 存在暫存區 等到要儲存再用 ApplyUpdates 寫回資料庫 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-05 09:31:32 IP:61.219.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-05 18:20:53 IP:61.59.xxx.xxx 未訂閱
感謝各位先進的不吝指教 有二資料表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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-05 23:14:06 IP:61.66.xxx.xxx 未訂閱
引言: 感謝各位先進的不吝指教 有二資料表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, 希望你可以看的懂!
系統時間:2024-06-28 17:49:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!