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

資料輸入的稽核

答題得分者是:T.J.B
ooctiger
一般會員


發表:25
回覆:46
積分:14
註冊:2002-07-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-12-16 14:42:29 IP:61.219.xxx.xxx 未訂閱
請問各位前輩下面這樣敘述的需求應如何做 ? 需使用到哪先元件,及方法如何? 在訂單系統中的Edit1中輸入客戶代號後檢查有無此客戶代號 如果沒有則出現一個視窗Show出客戶資料檔中的所有客戶代號 及名稱讓User選擇後輸入. 謝謝各位!
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-12-16 14:49:22 IP:61.220.xxx.xxx 未訂閱
引言: 請問各位前輩下面這樣敘述的需求應如何做 ? 需使用到哪先元件,及方法如何? 在訂單系統中的Edit1中輸入客戶代號後檢查有無此客戶代號 如果沒有則出現一個視窗Show出客戶資料檔中的所有客戶代號 及名稱讓User選擇後輸入. 謝謝各位!
建議把檢查動作放在存檔的時候 而在EDIT旁放一個SPEEDBUTTON供USER點選後開啟客戶資料檔中的所有客戶代號 使用到的元件 : FORM , TEDIT,TSPEETBUTTON,TDBGRID,TDATASOURCE,TTABLE OR TQUERY 做法: 把EDIT 所相關的TABLE及欄位指定好 然後當按下EDIT 旁 的TSPEEDBUTTON時 將放置DBGRID的FORM或是PANEL 呼叫出來 那這個DBGRID做什麼用呢 就是放置客戶資料檔中的所有客戶代號 而當USER點選DBGRID裡頭的某一筆資料時 利用自己寫的FUNCTION把資料傳回給EDIT 就不需要user自己key in 那假設user是自己key in資料 進edit 在存檔的時候去做檢查的動作 如果資料不符合 就raise exception.create 讓user知道 不需要再去做開啟客戶資料檔中的所有客戶代號的動作 而是讓user自己去點選speedbutton把dbgrid呼叫出來重新選擇 天行健 君子當自強不息~~@.@ 發表人 - T.J.B 於 2002/12/16 15:12:56
------
天行健
君子當自強不息~~@.@
ooctiger
一般會員


發表:25
回覆:46
積分:14
註冊:2002-07-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-12-16 15:05:22 IP:61.219.xxx.xxx 未訂閱
建議把檢查動作放在存檔的時候 而在EDIT旁放一個SPEEDBUTTON供USER點選後開啟客戶資料檔中的所有客戶代號 天行健 君子當自強不息~~@.@ ========================================== 一般在做輸入的時候就做檢查是否存在有這個客戶. 另外一點"SPEEDBUTTON供USER點選後開啟客戶資料檔中的所有客戶代號" 我從未用過SPEEDBUTTON,可以稍微講解一下嗎? Thank You !
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-12-16 15:18:21 IP:61.220.xxx.xxx 未訂閱
speedbutton 用法跟button是一樣的 只是他比較適合放在edit的旁邊或是當作小圖示按鈕 跟edit搭配也較為美觀 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
jerryhung
初階會員


發表:6
回覆:46
積分:30
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-16 16:11:27 IP:202.39.xxx.xxx 未訂閱
補充一下 要檢查客戶代號是否存在 可用QUERY元件去檢查,然後判斷RecordCount 如果RecordCount不是0,就代表這個代號已經存在 然後你就可以顯示你的DBGrid讓他選擇代號啦 是0,就把這個代號加入資料庫囉
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-16 17:18:59 IP:203.217.xxx.xxx 未訂閱
一般在做輸入的時候就做檢查是否存在有這個客戶. 我認為在輸入時就檢查才是理想的 如果你用的是DataAware(如TDBEdit等), 最理想應在客戶代號欄位之onFieldValidate, 如果不是DataAware(如TEdit),那只好在onExit或onKeyDwon判決是Enter(#13)時執行檢查 檢查方法可用下列Sql select count(*) from 客戶Table where 客戶代號='xxx' 如果結果為0 直接popup另一form要求輸入
ooctiger
一般會員


發表:25
回覆:46
積分:14
註冊:2002-07-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-18 15:14:35 IP:61.219.xxx.xxx 未訂閱
一般在做輸入的時候就做檢查是否存在有這個客戶. 我認為在輸入時就檢查才是理想的 如果你用的是DataAware(如TDBEdit等), 最理想應在客戶代號欄位之onFieldValidate, 如果不是DataAware(如TEdit),那只好在onExit或onKeyDwon判決是Enter(#13)時執行檢查 檢查方法可用下列Sql select count(*) from 客戶Table where 客戶代號='xxx' 如果結果為0 直接popup另一form要求輸入 可否指點一下onFieldValidate的用法? 謝謝!
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-12-18 15:48:48 IP:61.220.xxx.xxx 未訂閱
舉例 onFieldValidate的用法:    
procedure TfrmM0Check.QryChequedCHEQUEAMTValidate(Sender: TField);
begin
 if QryChequed.FieldByName('CHEQUEAMT').AsInteger < 0 then
 begin
   Application.MessageBox('金額輸入有誤 請查明!','訊息視窗',MB_OK MB_ICONERROR) ;
   QryChequedCHEQUEAMT.FocusControl ;
   Exit ;
 end;
end;
天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-12-18 20:02:14 IP:203.217.xxx.xxx 未訂閱
可否指點一下onFieldValidate的用法? onFieldValidate會在欄位值改變, 要寫入Buffer前被觸發, 因此不論user輸入值後用鍵盤或mouse離開此欄位均有效. 所傳入之參數Sender即為須Validate之欄位,你可以由此取得目前值加以驗證, 以決定是否接受
procedure TForm1.Query1CutoNoValidate(Sender: TField);
var custno:string;
begin
  custno:=Sender.asstring;  //由此取得user輸入之值
//假設你form上另有一個TQuery-->qryCheck用來檢查
  with qryCheck do begin
    sql.clear;
    sql.add('select count(*) form CUSTOMER where CUSTNO=' QuotedStr(custno));
    sql.open;
  end;  
  if qryCheck.fields[0].asinteger =0 then begin //客戶不存在
    if MessageDlg('客戶不存在, 是否新增', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
       ...popup另一form進行新增
    else
      Sender.focusControl;  //仍停在此欄位上不接受此值
  end;
end; 
ooctiger
一般會員


發表:25
回覆:46
積分:14
註冊:2002-07-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-12-19 09:41:10 IP:61.219.xxx.xxx 未訂閱
感謝各位先進的指點,現在我已經能夠做到在輸入客戶 資料後,稽核是否存在該客戶,存在則繼續輸入訂單其他資料 ,不存在的資料則Show出客戶代號及名稱---DBGrid,如果我 要在DBGrid上直接點選後將客戶代號帶入Edit1中,我應該 如何做? PS.我看過之前有關DBGRid.SelectedRows的Help說明,但實在 不懂可否再請各位幫忙. 以下是DBGRid.SelectedRows的 Help. The following example copies the selected rows in a db grid to a list box. procedure TForm1.Button1Click(Sender: TObject); var i, j: Integer; s: string; begin if DBGrid1.SelectedRows.Count>0 then with DBGrid1.DataSource.DataSet do for i:=0 to DBGrid1.SelectedRows.Count-1 do begin GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i])); for j := 0 to FieldCount-1 do begin if (j>0) then s:=s ', '; s:=s Fields[j].AsString; end; Listbox1.Items.Add(s); s:= ''; end; end;
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-12-19 10:01:15 IP:61.220.xxx.xxx 未訂閱
當你已經把DBGRID SHOW出來後要指定某一筆到EDIT1.TEXT的時候 只要加下面程式碼即可 例如 : 看你的EDIT1是對應DBGRID所連結QUERY的哪個欄位 EDIT1.TEXT := QUERY1.FIELDBYNAME('EMPNO').ASSTRING; PS:如果你是一次傳回一筆 那用不用DBGRid.SelectedRows其實沒有太大關係 DBGRid.SelectedRows.count 一般是用在多筆選擇的判斷 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
ooctiger
一般會員


發表:25
回覆:46
積分:14
註冊:2002-07-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-12-19 11:06:59 IP:61.219.xxx.xxx 未訂閱
當你已經把DBGRID SHOW出來後要指定某一筆到EDIT1.TEXT的時候 只要加下面程式碼即可 例如 : 看你的EDIT1是對應DBGRID所連結QUERY的哪個欄位 EDIT1.TEXT := QUERY1.FIELDBYNAME('EMPNO').ASSTRING;     PS:如果你是一次傳回一筆 那用不用DBGRid.SelectedRows其實沒有太大關係 DBGRid.SelectedRows.count 一般是用在多筆選擇的判斷    天行健 君子當自強不息~~@.@    ===============================================================    再請問一下 EDIT1.TEXT := QUERY1.FIELDBYNAME('EMPNO').ASSTRING; 應該寫在哪一個事件底下 Thank You !
hagar
版主


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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-12-19 11:40:41 IP:202.39.xxx.xxx 未訂閱
Query1 的 AfterScroll 事件    -- Believe the unbelievable.
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-12-19 12:05:49 IP:61.220.xxx.xxx 未訂閱
有一點要注意 : 如果你的dbgrid 和 edit1 在不同的 form 那麼你必須在放dbgrid的那個form 去use 放edit1的那個form 然後寫 假設放edit的那個form name 為 form1 form1.edit1.text := QUERY1.FIELDBYNAME('EMPNO').ASSTRING; 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
系統時間:2024-07-01 12:40:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!