全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1061
推到 Plurk!
推到 Facebook!

請問, 要用兩個查詢,找一筆資料庫的資料

尚未結案
jimm
一般會員


發表:10
回覆:9
積分:3
註冊:2004-09-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-05 17:52:34 IP:219.84.xxx.xxx 未訂閱
請問一下各位前輩 我的資料表內有著'種類','名稱','價格'三個欄位 然而'種類'有著重複的資料,但並不會有'種類'與'名稱'都重複的資料 目前的問題是我先將名稱讀入一個ComboBox裡,再經由一個Edit去輸入'價格' 只要在價格打完按下Enter之後,便會在第二個的Edit欄位出現價格 不知各位前輩是否可以提供我有什麼比較好的元件或方法可供小弟作為參考?? 謝謝
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-05 18:40:27 IP:202.62.xxx.xxx 未訂閱
您好﹗    ================================== 目前的問題是我先將名稱讀入一個ComboBox裡,再經由一個Edit去輸入'價格'只要在價格打完按下Enter之後,便會在第二個的Edit欄位出現價格 ================================== 以上紅色處是否筆誤了﹖ <><>========================= 我是您的朋友﹐有您真好﹗ ========================= 發表人 -
------
忻晟
jimm
一般會員


發表:10
回覆:9
積分:3
註冊:2004-09-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-05 19:00:49 IP:219.84.xxx.xxx 未訂閱
抱歉....更正之後如下: 先將名稱讀入一個ComboBox裡,再經由一個Edit去輸入'名稱'只要在名稱打完按下Enter之後,便會在第二個的Edit欄位輸出該筆資料的價格
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-06 09:14:09 IP:202.62.xxx.xxx 未訂閱
您好﹗    您的要求用程式碼就可以做控制了﹐使用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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-06 09:54:14 IP:61.62.xxx.xxx 未訂閱
不好意思...我的說法可能有點讓你誤解 舉例來說...我的資料表的型態如下圖: 我在ComboBox是Show出Field的DisplayName 然後再查詢的時候....是做先從ComboBox選擇第一個欄位...要選擇'硬碟品牌' 第二個就是從Edit1 輸入硬碟的容量 輸入完畢之後,可以再從Edit2 輸出價格.... 不曉得cashxin2002前輩是否聽的懂我所說的呢? 煩請指教...謝謝
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-06 14:22:22 IP:202.62.xxx.xxx 未訂閱
您好﹗    在您的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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-11-08 12:14:34 IP:219.84.xxx.xxx 未訂閱
不好意思,請問一下,會出現一行程式碼錯誤 ADOQuery1: Missing SQL Proerty.... 這是什麼意思.....? 因為之前沒碰過Delphi的SQL這一段過..... 所以讓前輩費心了.....麻煩值點一下... 謝謝
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-11-08 14:12:38 IP:202.62.xxx.xxx 未訂閱
您好﹗    這句錯誤信息是指漏寫了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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-11-13 14:06:40 IP:219.84.xxx.xxx 未訂閱
[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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-13 15:03:36 IP:202.62.xxx.xxx 未訂閱
您好﹗    之前回覆的範例中就有此功能﹐小弟在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﹐如果資料值有相同時﹐就不會做單一值的查 詢﹐而是擷取出所有的資料﹐亦會出現重复的資料值﹒ ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
系統時間:2024-05-09 10:28:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!