請問, 要用兩個查詢,找一筆資料庫的資料 |
尚未結案
|
jimm
一般會員 ![]() ![]() 發表:10 回覆:9 積分:3 註冊:2004-09-16 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ ==================================
目前的問題是我先將名稱讀入一個ComboBox裡,再經由一個Edit去輸入'價格'只要在價格打完按下Enter之後,便會在第二個的Edit欄位出現價格
==================================
以上紅色處是否筆誤了﹖
------
忻晟 |
jimm
一般會員 ![]() ![]() 發表:10 回覆:9 積分:3 註冊:2004-09-16 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 您的要求用程式碼就可以做控制了﹐使用Locate等蒐索方法或者SQL語法皆可﹐以下為Locate方法的使用﹐供參考﹕
//將名稱讀入一個ComboBox begin ADOTable1.Open; ADOTable1.First; While Not ADOTable1.Eof do begin ComboBox1.Itmes.Add(ADOTable1.Fields[1].AsString); ADOTable1.Next; end; end; //再經由一個Edit去輸入'名稱'只要在名稱打完按下Enter之後,便會在第二個的Edit欄位輸出該筆資料的價格 Edit1的OnKeyPress事件中﹕ begin if Key=#13 then begin if ADOTable1.Locate('名稱', Edit1.Text, [loCaseInsensitive]) then begin Edit2.Text := IntToStr(ADOTable1.Fields[2].AsInteger); //以上假設單價欄位為Integer形態﹐若欄位為Real形態﹐可寫成 //Edit2.Text := FloatToStr(ADOTable1.Fields[2].AsFloat); end else begin ShowMessage('您輸入的名稱不存在﹐請重新輸入'); Edit1.SetFocus; end; end; end;========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟 |
jimm
一般會員 ![]() ![]() 發表:10 回覆:9 積分:3 註冊:2004-09-16 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 在您的Form中并沒有看到ComboBox和Edit元件﹐据您的要求而言﹐試試如下的程式碼﹒ 假設您是用ADOTable連接資料庫﹐現再加入一個ADOQuery元件﹐用于查詢作用﹔另外﹐ComboBox1元件的Style屬性值設為csDropDownList﹐目的是不允許使用在ComboBox1元件中自行輸入﹐只能選擇﹔最后﹐記得將Edit2元件的ReadOnly屬性值設為True﹐即不允許使用者對其進行Key In的動作﹒
在ADOTable元件的AfterPost和AfterDelete事件中共用如下的程式碼﹐作用是當資料表進行異動存檔或刪除動作時﹐就將資料表中品牌欄位單一值加入到ComboBox1的Items屬性中﹐以供使用者選擇﹕ begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select Distinct (List) From TableName'); //以上使用Distinct查詢中品牌欄位的單一值 ADOQuery1.Open; ADOQuery1.First; While Not ADOQuery1.Eof do begin ComboBox1.Items.Add(ADOQuery1.Fields[0].AsString); ADOQuery1.Next; end; end; 然后在Edit1的OnkeyPress事件中判斷使用者是否按下回車鍵﹐若是則在Edit2中顯示出相對應的單價﹕ begin if ComboBox1.Text = '' Or Edit1.Text = '' then begin ShowMessage('請先在ComboBox中選擇品牌﹐在Edit中輸入容量值'); end else begin if Key=#13 then begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From TableName Where '); ADOQuery1.SQL.Add('List = ''' ComboBox1.Text ''' and '); ADOQuery1.SQL.Add('Name = ''' Edit1.Text ''''); ADOQuery1.Open; if ADOQuery1.RecordCount <> 0 then Edit2.Text := IntToStr(ADOQuery1.Fields[2].AsInteger) //以上假設單價欄位為Integer形態 else ShowMessage('您需要查詢的內容不存在﹐請重新輸入查詢'); end; end; end;========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟 |
jimm
一般會員 ![]() ![]() 發表:10 回覆:9 積分:3 註冊:2004-09-16 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 這句錯誤信息是指漏寫了ADOQuery1的SQL敘述
解決的方法可直接在設計時期雙擊ADOQuery1的SQL屬性﹐然后將SQL敘述寫在其編輯器中﹐如﹕Select * From 資料表名稱 或者在程式碼中控制﹐如下﹕
begin ADOQuery1.Close; //寫入敘述之前﹐需要先Close ADOQuery1 ADOQuery1.SQL.Clear; //清除目前SQL的敘述內容 ADOQuery1.SQL.Add('Select * From 資料表名稱'); //以上處即是SQL敘述語法﹐可以換成您的SQL敘述 ADOQuery1.Open; //利用SQL語法將ADOQuery1 Open﹐可以回傳查詢資料 end;========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟 |
jimm
一般會員 ![]() ![]() 發表:10 回覆:9 積分:3 註冊:2004-09-16 發送簡訊給我 |
[quote]
您好﹗ 在您的Form中并沒有看到ComboBox和Edit元件﹐据您的要求而言﹐試試如下的程式碼﹒ 假設您是用ADOTable連接資料庫﹐現再加入一個ADOQuery元件﹐用于查詢作用﹔另外﹐ComboBox1元件的Style屬性值設為csDropDownList﹐目的是不允許使用在ComboBox1元件中自行輸入﹐只能選擇﹔最后﹐記得將Edit2元件的ReadOnly屬性值設為True﹐即不允許使用者對其進行Key In的動作﹒
在ADOTable元件的AfterPost和AfterDelete事件中共用如下的程式碼﹐作用是當資料表進行異動存檔或刪除動作時﹐就將資料表中品牌欄位單一值加入到ComboBox1的Items屬性中﹐以供使用者選擇﹕ begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select Distinct (List) From TableName'); //以上使用Distinct查詢中品牌欄位的單一值 ADOQuery1.Open; ADOQuery1.First; While Not ADOQuery1.Eof do begin ComboBox1.Items.Add(ADOQuery1.Fields[0].AsString); ADOQuery1.Next; end; end;述刪............ 還想再請問一下.... 由於我的品牌有許多相同的 那加入Combo後 會出現許多相同的選擇 我該如何把相同的可以讓她不要加入Combo內....我只希望出現一次而已 感謝cashxin2002 的熱心指導 |
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 之前回覆的範例中就有此功能﹐小弟在SQL敘述中加入Distinct﹐作
用就是抓取不重复的資料﹐如下紅色處﹕
begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select Distinct (List) From TableName'); //以上使用Distinct查詢中品牌欄位的單一值 ADOQuery1.Open; ADOQuery1.First; While Not ADOQuery1.Eof do begin ComboBox1.Items.Add(ADOQuery1.Fields[0].AsString); ADOQuery1.Next; end; end;如果在SQL敘述中不使用Distinct﹐如果資料值有相同時﹐就不會做單一值的查 詢﹐而是擷取出所有的資料﹐亦會出現重复的資料值﹒ ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |