DBGrid insert and edit problem |
答題得分者是:cashxin2002
|
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
請問各位高手,我在寫一個DBGrid可insert, edit, delete,但遇到以下問題:
執行時可以insert, edit.但當關閉執行程式後重開就不見我剛才所insert or edit的資料.現在我po程式碼出來:
Query1 :select * from shippingnoteFee where kind = '1' and refno = :REF and hawb = :H
Query1 : Request Live = true
Active = true AutoReflesh = true CachedUpdate = true
DataSource1 = Query1
DBGrid1 = DataSource1
是那裡錯了呢?
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
請將CashedUpdate屬性值設為False
CashedUpdate屬性是指是否利用交易的功能﹐也可配合UpdateSQL元件來實現交易功能﹐當您對資料庫執行編輯時﹐所有的資料異動都只是存入暫存區而已﹐在沒有ApplyUpdates之前都沒有用﹒ 如果你還是要使用這個交易功能﹐新增一個Button其Onclick程式碼如下﹕
begin
try Query1.Post; Query1.ApplyUpdates; Query1.CommitUpdates;//清空暫存區中內容 Except Query1.CancelUpdates; ShowMessage('資料沒有變動'); end;end; 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/08/07 16:58:32
------
忻晟 |
selina
一般會員 發表:39 回覆:64 積分:20 註冊:2002-12-05 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹒ 這是因為Query元件并不會將編輯后的資料立即顯示出來﹐必須通過重新取得資料表的方法才能顯示最新的資料表﹐建議您不要將AutoRefresh屬性設為True,如果您使用CachedUpdate.True的話﹐可在你程式碼中加入如下兩句(紅色部分)﹕
begin
try Query1.Post; Query1.ApplyUpdates; Query1.CommitUpdates;//清空暫存區中內容 Query1.Close; Select * From 資料表名稱; Query1.Open; //利用Close和Open重新取得資料庫中的資料﹐也可以相同于Table元件的Refresh功能吧 Except Query1.CancelUpdates; ShowMessage('資料沒有變動'); end;end; 若CachedUpdate.False的話﹐請在負責顯示的Query元件的AfterPost事件中下﹕ begin Query1.Close; Select * From 資料表名稱; Query1.Open;end; 這樣做有一個缺點﹐就是當Query Close/Open之后﹐Query重新取得最新的資料﹐相對應的﹐資料表的指標就會移動第一筆資料﹐如果目前的資料表已經有上百上千筆的資料﹐就會是一種麻煩了﹒ 另外一種作法就是使用兩個Query﹐一個負責編輯(如新增﹐刪除﹐更新等作業)另一個負責顯示﹐在每次編輯完成之后﹐將此Query Close/Open一次即可﹒ 至于您的第二個問題﹐我個人的想法﹐您可以利用另一個Query的select Sum...功能將某個Column的Sum合計出來﹐然后再用DBEdit1元件來對應這個Query查詢結果﹐就可以顯示啦﹐好處不用擬寫太多的程式碼﹐屬性設定就能搞定﹒ 參考看看﹒ 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/08/07 19:36:05 發表人 - cashxin2002 於 2003/08/07 22:02:28
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |