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

資料庫元件自動儲存的問題

尚未結案
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-24 19:06:23 IP:61.64.xxx.xxx 未訂閱
Dear 各位先進: 請問要如何"取消"資料庫元件移動時自動儲存的功能 因為我想讓程式控制就好
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-24 19:35:53 IP:202.39.xxx.xxx 未訂閱
例:
procedure TForm1.Table1BeforeScroll(Dataset: TDataset);
begin
  if Table1.State in [dsEdit, dsInsert] then begin
    if MessageDlg('Table1 的資料尚存檔, 存檔乎?', mtConfirmation, [mbYes, mbCancel], 0) = mrCancel then
      Abort; 
  end;
end;
--- Everything I say is a lie.
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-25 01:04:07 IP:61.64.xxx.xxx 未訂閱
Dear hagar, 上面的方法...不過還是移動Table1時...資料會存入ㄟ 我要的是...不能存入
cashxin2002
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-25 01:20:30 IP:63.84.xxx.xxx 未訂閱
您好!    試試如下的方法: Table元件的beforeScroll事件中:
begin
  if Table1.State in [dsEdit, dsInsert] then
    Table1.Cancel;
end;
另外也可將如上程式碼寫在DataSource元件的OnDataChange事件中試試看! 參考看看! 經hagar版主大大提醒﹐小弟在DataSource元件的OnDataChange事件中測試了一下﹐結果也不行﹐任何Data的欄位移動都會触發Cancel的事件﹐看來要再找其它的解決途徑了﹐抱歉﹗抱歉﹗ ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/11/25 10:13:21
------
忻晟
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-25 08:21:35 IP:202.39.xxx.xxx 未訂閱
失禮! 小弟錯了. 剛實地測試了一下 原來它先存檔之後才會觸發 BeforeScroll 事件 所以這方法不行 --- Everything I say is a lie.
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-25 11:38:35 IP:61.64.xxx.xxx 未訂閱
謝謝兩位版主............我也正努力的 Try...
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-25 15:35:22 IP:210.65.xxx.xxx 未訂閱
Hi:    我目前的控制方法有兩種: 1.當進入新增或編輯模式,即不允許使用者移動上下筆資料,除非 User 按下 Save 或 Cancel 按鈕,才恢復瀏覽模式 2.將 Dataset 的 CachedUpdates 屬性設為 True,如此即可批次對資料庫進行更新(詳見 Delphi Help --> StartTransaction, ApplyUpdates, Commit, Rollback, CommitUpdates example) -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-25 16:01:57 IP:218.163.xxx.xxx 未訂閱
我會設一全區變數(ISPOST),當按下修改,新增將此變數設成TRUE 然後再beforepost 事件中判斷 if not ISPOST then   abort; 這樣當他不是經由按下修改,新增按鈕時,游標就無法移到別的row上面 因為在上面的事件中,已經abort了,這樣就能避免自動post了 永遠追不上技術更新的速度
------
星期一,二...無窮迴圈@@
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-11-25 16:55:04 IP:61.222.xxx.xxx 未訂閱
交流一下小弟的經驗談 一般說來dbgrid可拿來顯示dataset的全部資料包含各個欄位與列,真是再好也不過了,又可以拿來新增刪除修改,這真的是太好了, 只是有次,小弟看了看公司新來的同事設計的架構,嚇....grid都只拿來顯示而已,要編輯就開另外一個form上面擺了各個欄位對應的edit來編輯與新增,如果是編輯模式的話就把資料在formcreate的時候填入這些edit裡面,如果以出貨單為例子,那麼原來一個form可以搞定的事情,用這樣來寫要要兩個form,以一套進銷存系統來說,幾乎只要是master-detail類型的form都要從1變成2,還記得那時候我問為什麼這樣設計: "學校老師這樣教的...." 然後....臉上三條黑線... 現在看到這篇post,我突然發現那時同事所設計的架構原來可以解決這個問題,這讓我感觸很深,再怎麼笨拙的方法,都有它的優點所在......
sword185
一般會員


發表:36
回覆:81
積分:23
註冊:2002-06-05

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-11-26 10:53:16 IP:61.64.xxx.xxx 未訂閱
呵呵.... 上面提到的方式的我之前有做過...... 只不過比較麻煩!! 不過我昨天想到一個方法 先將Table1.ReadOnly=True; 再用一顆按鈕來控制 procedure TForm1.Button1Click(Sender: TObject); begin If(Application.MessageBox('您確定要修改這筆資料嗎?','※修改',MB_ICONInformation MB_YesNo)=ID_Yes)then begin Table1.Close; Table1.ReadOnly:=False; Table1.Open; end; end; 不過往下的欄位均可修改 再次謝謝各位先進.......
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-11-26 16:53:30 IP:210.65.xxx.xxx 未訂閱
Hi:    剛剛找到一篇文章,供各位參考 http://delphi.ktop.com.tw/topic.php?topic_id=26531 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
系統時間:2024-07-01 15:05:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!