線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1110
推到 Plurk!
推到 Facebook!

DBGrid insert and edit problem

答題得分者是:cashxin2002
selina
一般會員


發表:39
回覆:64
積分:20
註冊:2002-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-07 16:29:07 IP:203.162.xxx.xxx 未訂閱
請問各位高手,我在寫一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-07 16:47:39 IP:63.84.xxx.xxx 未訂閱
請將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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-07 17:16:32 IP:203.162.xxx.xxx 未訂閱
我己把CachedUpdate 拿掉了,可以insert,但是insert會他不會立刻出現該筆資料,而要我關閉重開或再新增別一筆資料時才會顯示出來. 還有想請教cashxin大大,另外我要用一個Edit或DBEdit來計錄Query1中某colum 的 sum.那要如何不做得到呢?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-07 17:42:39 IP:63.84.xxx.xxx 未訂閱
您好﹒    這是因為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
------
忻晟
系統時間:2024-06-24 21:15:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!