資料輸入的稽核 |
答題得分者是:T.J.B
|
ooctiger
一般會員 發表:25 回覆:46 積分:14 註冊:2002-07-08 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 請問各位前輩下面這樣敘述的需求應如何做 ? 需使用到哪先元件,及方法如何? 在訂單系統中的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 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
jerryhung
初階會員 發表:6 回覆:46 積分:30 註冊:2002-12-11 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
ooctiger
一般會員 發表:25 回覆:46 積分:14 註冊:2002-07-08 發送簡訊給我 |
一般在做輸入的時候就做檢查是否存在有這個客戶.
我認為在輸入時就檢查才是理想的
如果你用的是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 發送簡訊給我 |
舉例
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 發送簡訊給我 |
可否指點一下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 發送簡訊給我 |
感謝各位先進的指點,現在我已經能夠做到在輸入客戶
資料後,稽核是否存在該客戶,存在則繼續輸入訂單其他資料
,不存在的資料則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 發送簡訊給我 |
當你已經把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 發送簡訊給我 |
當你已經把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 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |