如何檢查各個資料欄位是否有輸入文字 |
答題得分者是:T.J.B
|
sword185
一般會員 發表:36 回覆:81 積分:23 註冊:2002-06-05 發送簡訊給我 |
|
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
提供一個範例 請參考
procedure TForm2.Table1BeforePost(DataSet: TDataSet);
begin
if ((DBEdit1.Text = '') or (DBEdit1.Text = Null)) then
begin
MessageDlg('XXX不可空白!', mtWarning, [mbOK], 0);
DBEdit1.SetFocus;
Abort;
end;
if ((DBEdit2.Text = '') or (DBEdit2.Text = Null)) then
begin
ShowMessage('XXX不可空白');
DBEdit2.SetFocus;
Abort;
end;
if ((DBEdit3.Text = '') or (DBEdit3.Text = Null)) then
begin
ShowMessage('XXX不可空白');
DBEdit3.SetFocus;
Abort;
end;
if ((DBEdit4.Text = '') or (DBEdit4.Text = Null)) then
begin
ShowMessage('XXX不可空白');
DBEdit4.SetFocus;
Abort;
end;
if ((DBEdit5.Text = '') or (DBEdit5.Text = Null)) then
begin
ShowMessage('XXX不可空白');
DBEdit5.SetFocus;
Abort;
end;
if ((DBEdit6.Text = '') or (DBEdit6.Text = Null)) then
begin
ShowMessage('XXX不可空白');
DBEdit6.SetFocus;
Abort;
end;
end;
|
sword185
一般會員 發表:36 回覆:81 積分:23 註冊:2002-06-05 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hello : 試試這段吧 先將各個TLabel.FocusControl設定好再跑
procedure TForm1.Button1Click(Sender: TObject); var i : integer; str : String; begin str := ''; for i := 0 to ComponentCount - 1 do begin if Components[i] is TLabel then begin if Assigned((Components[i] as TLabel).FocusControl) then begin if trim(((Components[i] as TLabel).FocusControl as TEdit).Text) = '' then begin str := str (Components[i] as TLabel).Caption #13#10; end; end; end; end; if str <> '' then str := str '未輸入資料'; ShowMessage(Str); end;
------
我不是高手, 高手是正在銀幕前微笑的人. |
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
假設你的文字方塊是TEDIT
我是將各TEDIT元件的NAME都設定成這樣 EDIT 欄位名稱
例如員工編號的欄位名稱是EMPNO 那麼對應的TEDIT的NAME就設定成 EDIT_EMPNO
依此類推
拉好一個TTABLE 之類的元件 盡量把需要檢查的欄位拉在一起
假設你目前有十個欄位要檢查 可以把她們擺在第零個到第九個
接下來只要跑一個迴圈檢查就可 以下的你可參考
-----------------------------------
Procedure XXX
var dwCount : Integer;
errMSG,strChk : String;
begin
errMSG : = '';
for dwCount := 0 to 9 do //這邊可能為了維護方便可以在改變得更好
begin
strChk := TEdit(FindComponent('EDIT_' Table1.Fieds[dwCount]).Name).Text
if strChk = '' then
errMsG := errMSG '[' strChk ']' #10#13;
end;
if Length(errMSG) > 0 then
raise Exception.Create(errMSG '以上欄位請輸入資料');
end;
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
給你參考
procedure TForm1.Button1Click(Sender: TObject); var i,j : integer; Edtcount,s,s1 : String; flag : boolean; begin j:=0; Edtcount := ''; for i := 0 to pred(ComponentCount) do //跑迴圈找元件 begin if ( Components[i] is TEdit ) then //如果是Tedit類別元件 begin if ((Components[i] as TEdit).Text = '') then //如果該元件的Text 是空白 begin Edtcount := Edtcount (Components[i] as TEdit).Name '未填入資料' #10#13; //就先記錄到Edtcount字串變數裡 end; s:=(Components[i] as TEdit).Name; s1:= copy(Edtcount,1,5); if CompareText(s,s1) = 0 then (Components[i] as TEdit).SetFocus; //將focus放在沒有資料的第一個元件 end; end ; ShowMessage(Edtcount);//秀出有哪幾個元件未填入資料 end; end.回首來時路 也無風雨也無晴~~@.@
------
天行健 君子當自強不息~~@.@ |
sword185
一般會員 發表:36 回覆:81 積分:23 註冊:2002-06-05 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
sword185
一般會員 發表:36 回覆:81 積分:23 註冊:2002-06-05 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
|
sword185
一般會員 發表:36 回覆:81 積分:23 註冊:2002-06-05 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hello sword185 兄你好:
在上面的程式裡有一個Str的參數, 你可以將他傳出後直接顯示出來
例如
function TForm1.ChkEditEmpty : String; var i : integer; str : String; begin str := ''; for i := 0 to ComponentCount - 1 do begin if Components[i] is TLabel then begin if Assigned((Components[i] as TLabel).FocusControl) then begin if trim(((Components[i] as TLabel).FocusControl as TEdit).Text) = '' then begin str := str (Components[i] as TLabel).Caption #13#10; end; end; end; end; if str <> '' then str := str '未輸入資料'; Result := Str; end; procedure TForm1.Button1Click(Sender: TObject); var ErrChkEdit : String; begin ErrChkEdit := ChkEditEmpty; if ErrChkEdit <> '' then begin Application.CreateForm(TForm2, Form2); Form2.Label1.Caption := ErrChkEdit; Form2.ShowModal; Form2.Free; Form2 := nil; end; end;
------
我不是高手, 高手是正在銀幕前微笑的人. |
Nicole
一般會員 發表:11 回覆:11 積分:4 註冊:2002-08-12 發送簡訊給我 |
先將各個TLabel.FocusControl設定好再跑 procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
str : String;begin
str := '';
for i := 0 to ComponentCount - 1 do begin
if Components[i] is TLabel then begin
if Assigned((Components[i] as TLabel).FocusControl) then begin
if trim(((Components[i] as TLabel).FocusControl as TEdit).Text) = ''
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
想請教的是如果我的form上面除了edit外還有別的元件,例如dblookupcombobox、memo的話,那麼此行程式或者是此段程式是否要做任何的修改呢?
因為不論我是否對其程式有無修改過都會出現Inviald class typecast這樣的錯誤訊息。不知發生什麼問題?所以請教各位高手,麻煩幫忙一下^^ 謝謝
then begin
str := str + (Components[i] as TLabel).Caption + #13#10; end;
end;
end;
end;
if str <> '' then
str := str + '未輸入資料';
ShowMessage(Str);
end;
》《
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Nicole 您好: Inviald class typecast
這是型別轉換錯誤的訊息, 因為dblookupcombobox、memo都沒有Text的屬性所以會產生錯誤.若要改進的話目前小弟只想到用If..then的方式去做
例如:
if (Components[i] as TLabel).FocusControl is TEdit then begin if trim(((Components[i] as TLabel).FocusControl as TEdit).Text) = '' then begin ... end; end else if (Components[i] as TLabel).FocusControl is TMemo then begin if trim(((Components[i] as TLabel).FocusControl as TMemo).Lines.Text) = '' then begin ... end; end;另外舉個例子, 像這幾個元件都有Color屬性, 你便可以不用那麼辛苦去判斷, 直接用一種下去套, 譬如在OnEnter or OnExit的事件下 procedure TForm1.DBLookupComboBox1Enter(Sender: TObject); begin TEdit(Sender).Color := clAqua; end;這時候不管TEdit, TMemo, TDBLookupComboBox...都能套用
------
我不是高手, 高手是正在銀幕前微笑的人. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |