請教如何用combox取值 |
答題得分者是:cashxin2002
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
|
chamstar
一般會員 發表:24 回覆:36 積分:12 註冊:2004-10-16 發送簡訊給我 |
不好意思,是我沒講清楚,我有一職位庫zw,內有兩個字段 zw_no,zw_name,我另有一員工庫YG,內有工號gh,姓名xm,職位代號zw_no,職位名稱zw_name,我在form中用DBCOMBOX1對應員工庫中的zw_no,DBEDIT1對應員工庫中的zw_name我想在選職位代號時,dbedit1能自動顯示職位庫中對應的zw_name.
procedure TForm1.DBComboBox1DropDown(Sender: TObject);
var bx:string; begin
with ADOQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('Select Distinct zw_no,zw_name from ZW');
Open;
if IsEmpty then exit;
DBComboBox1.Items.Clear;
while not eof do
begin
bx:=ADOQuery1.FieldByName('zw_no').AsString;
DBComboBox1.items.add(bx);
Next;
end;
end;
可我不知道如何在onchange中寫代碼才能DBEDIT1自動顯示相應值
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 再加入一個ADOQuery元件﹐Name屬性為ADOQuery2﹐連接職位庫﹒
在DBComboBox1元件的OnChange事件中﹕
方法一﹐使用Locate功能﹕ begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Select * From zw'); ADOQuery2.Locate('zw_no', DBComboBox1.Text, [loCaseInsensitive]); DBEdit1.Text := ADOQuery2.Fields.Fields[1].AsString; end; 方法二﹐使用SQL語法﹕ begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Select * From zw '); ADOQuery2.SQL.Add('Where zw_no = ''' DBComboBox1.Text ''''); ADOQuery2.Open; DBEdit1.Text := ADOQuery2.Fields.Fields[1].AsString; end;注﹕就您的要求而言﹐記得要將DBComboBox元件的Style屬性值設為﹕csDropDownList﹐即不允許使用者在DBComboBox元件中做KeyIn﹐另外DBEdit元件的ReadOnly屬性也需要設定True﹐因為此欄位值是經DBComboBox值的變化而得取的﹐故也不能讓使用者做KeyIn的動作﹒ 另外﹐建議您將DBComboBox元件抓取職位庫中zw_no欄位值的相關程式寫在連接職位庫之資料集元件的AfterPost和AfterDelete事件中﹐因為將程式寫在DBComboBox元件的OnDropDown事件中﹐在每次對DBComboBox元件做選擇的時候﹐皆會触發此事件﹐效率方法大打折扣﹐倒不如在職位庫發生異動(Post或Delete時)時即時的將其資料值寫入到DBComboBox中﹒ ========================= 大病初愈﹐休養調整中... ========================= 發表人 - cashxin2002 於 2004/10/23 16:13:43
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |