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

請問在感知元件中DBGrid和TDNavigator作配合時,新增如要做一些處理。

尚未結案
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-28 09:41:56 IP:61.221.xxx.xxx 未訂閱
請問各位: 目前有TDNavigator和DBGrid時,處理新增一個記錄,按新增的按鈕。 如果,要判斷此筆編號是否在某一個表格是否有存在。 如不存在時不在儲存動作,如存在才在儲存動作。 請問我該在那裡設這個描述呢。 謝謝。 麻煩大家。
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-28 10:16:54 IP:61.70.xxx.xxx 未訂閱
您好: 再DNavigator的OnClick中判斷如果Button=Insert就下 Select * From 某表格 Where 某表格編號=目前的標號 如果AdoQuery.RecordCount>=1就表示存在.
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-28 11:25:51 IP:61.221.xxx.xxx 未訂閱
Hi supman: 不好意思,如果當使用者只是先新增按鈕, 連編號都還沒有輸入時,是無法去判斷是否有無存在此筆資料。 所以我是在post中去判斷。 以下是我的程式的處理,麻煩您幫我看如何去不作處理。 謝謝您。 procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); var dbnav:TDBNavigator; NavBtn:TNavButton; begin if Sender is TDBNavigator then begin dbnav := Sender as TDBNavigator; {狀態為儲存} if Button=nbPost then begin ADOQuery4.Close; ADOQuery4.SQL.Clear; ADOQuery4.SQL.Add('SELECT MB001 FROM INVMB '); ADOQuery4.SQL.Add('WHERE (MB005='01' OR MB005='06') AND '); ADOQuery4.SQL.Add('MB001=''' TRIM(DBEdit1.Text) ''' '); ADOQuery4.Open; if ADOQuery4.RecordCount > 1 begin // 改變按鈕狀況 EditModeSpeedBtn(true); EditModeDBEdit(true); EditModeNavigBtn(dbnav,true); end else //如何不作儲存的動作 end; {狀態為取消} if Button=nbCancel then begin EditModeSpeedBtn(true); EditModeDBEdit(true); EditModeNavigBtn(dbnav,true); end; end; end;
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-28 15:07:32 IP:61.70.xxx.xxx 未訂閱
您好: 剛剛去幫您測試了一下 else //如何不作儲存的動作 AdoQuery.Cancel();//照理說這裡放Cancel就可以了 end; 但我測試發現不行,所以就在AdoQuery的BeforePost,AfterPost及Navigator的Click上個秀了一個訊息,發現他的訊息順序是BeforePost,AfterPost,最後才是 Navigator的Click,所以當User按下了Post,Navigator早已對資料庫下了儲存的指令,因此您要取消他可能沒辦法再Navigator的Click上做,要將程式移到BeforePost,或者自己做一組像Navigator按鈕的功能. http://delphi.ktop.com.tw/topic.php?topic_id=31400 以上提供您參考. 發表人 - supman 於 2005/04/28 16:12:37
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-28 16:51:06 IP:218.15.xxx.xxx 未訂閱
插个花: t0288542您好
判断所新增的MB001字段值是否与DBEdit1.Text 相同,相同则执行post,
不同则中断,再一次进行输入。
procedure TForm1.Query1BeforePost(DataSet: TDataSet);
begin
  if DataSet.FieldByName('MB001').AsString<>DBEdit1.Text then
    begin
      showmessage('数据不符!请重新输入');
      abort;
    end;
end;
不知是不是您所要的,试试看 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-29 15:03:23 IP:61.221.xxx.xxx 未訂閱
謝謝大家, 後來我的方式是利用點選新增按鈕, DBEdit來作控制是否另一表格是否有存在這筆記錄, 但是我想在一個動作是當無對此筆資料時, 將post按鈕給[Enable],不知如何去指定呢. 謝謝。 procedure TForm1.DBEdit1Exit(Sender: TObject); begin ADOQuery4.Close; ADOQuery4.SQL.Clear; ADOQuery4.SQL.Add('SELECT MB001 FROM INVMB '); ADOQuery4.SQL.Add('WHERE (MB005=''01'' OR MB005=''06'') AND '); ADOQuery4.SQL.Add('MB001=''' TRIM(DBEdit1.Text) ''' '); ADOQuery4.Open; if ADOQuery4.RecordCount = 0 then begin MessageDlg('注意,查無此筆品名: ' TRIM(DBEdit1.Text) ' ,資料不作儲存動作,請按[取消]按鈕!!' , mtWarning, [mbOk], 0); end; end;
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-29 15:11:25 IP:61.221.xxx.xxx 未訂閱
謝謝大家, 後來我的方式是利用點選新增按鈕, DBEdit來作控制是否另一表格是否有存在這筆記錄, 但是我想在一個動作是當無對此筆資料時, 將post按鈕給[Enable],不知如何去指定呢. 謝謝。 procedure TForm1.DBEdit1Exit(Sender: TObject); begin ADOQuery4.Close; ADOQuery4.SQL.Clear; ADOQuery4.SQL.Add('SELECT MB001 FROM INVMB '); ADOQuery4.SQL.Add('WHERE (MB005=''01'' OR MB005=''06'') AND '); ADOQuery4.SQL.Add('MB001=''' TRIM(DBEdit1.Text) ''' '); ADOQuery4.Open; if ADOQuery4.RecordCount = 0 then begin MessageDlg('注意,查無此筆品名: ' TRIM(DBEdit1.Text) ' ,資料不作儲存動作,請按[取消]按鈕!!' , mtWarning, [mbOk], 0); end; end;
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-29 16:20:01 IP:218.15.xxx.xxx 未訂閱
引言: 謝謝大家, 後來我的方式是利用點選新增按鈕, DBEdit來作控制是否另一表格是否有存在這筆記錄, 但是我想在一個動作是當無對此筆資料時, 將post按鈕給[Enable],不知如何去指定呢. 謝謝。

type
  //继承一下
  TMyDBNavigator=class(TDBNavigator)
  end;    procedure TForm1.DBEdit1Exit(Sender: TObject);
begin
  ADOQuery4.Close;
  ADOQuery4.SQL.Clear;
  ADOQuery4.SQL.Add('SELECT MB001 FROM INVMB ');
  ADOQuery4.SQL.Add('WHERE  (MB005=''01'' OR MB005=''06'') AND ');
  ADOQuery4.SQL.Add('MB001=''' TRIM(DBEdit1.Text) ''' ');
  ADOQuery4.Open;
  if ADOQuery4.RecordCount = 0 then
    begin
      MessageDlg('注意,查無此筆品名: '  TRIM(DBEdit1.Text)  ' ,資料不作儲存動作,請按[取消]按鈕!!' ,  mtWarning, [mbOk], 0);
TMyDBNavigator(DBNavigator1).Buttons[nbPost].Enabled:=false;
    end;
end;
您好,查看DBCtrls.pas type TDBNavigator = class (TCustomPanel) ... protected Buttons: array[TNavigateBtn] of TNavButton; …… end; 通过Buttons即可访问所有按纽,但因为Buttons定义在protected部分, 因此无法直接访问,所以应自己继承个来使用,如上
============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
t0288542
中階會員


發表:216
回覆:254
積分:94
註冊:2004-10-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-02 09:57:44 IP:61.221.xxx.xxx 未訂閱
謝謝, supman和deity 已經OK。
系統時間:2024-06-26 7:53:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!