設定範圍條件 |
尚未結案
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 比如說這個條件欄位的形態為整數形態(Integer)﹕
begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From 資料表 Where '); ADOQuery1.SQL.Add('FieldName Between :Temp1 and :Temp2'); ADOQuery1.SQL.Text := StringReplace(ADOQuery1.SQL.Text, 'FieldName', ComboBox1.Text, []); ADOQuery1.Parameters.ParamByName('Temp1').Value := IntToStr(Edit1.Text); ADOQuery1.Parameters.ParamByName('Temp2').Value := IntToStr(Edit2.Text); ADOQuery1.Open; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ Temp1和Temp2是在SQL語法中的Param變數﹐在SQL中指定變數后﹐就需要給變值賦值﹐以下兩句的作用就是賦值﹕
ADOQuery1.Parameters.ParamByName('Temp1').Value := IntToStr(Edit1.Text);
ADOQuery1.Parameters.ParamByName('Temp2').Value := IntToStr(Edit2.Text); FieldName是一個暫定名稱變數﹐作用是代表條件欄位的名稱﹐因為在SQL敘述中欄位名可能是有變化的﹐所以用這個暫定名稱變數再配合下句的StringReplace函數﹐將ComboBox中被使用者選取的內容來替換這個FieldName暫定名稱變數﹒
ADOQuery1.SQL.Text := StringReplace(ADOQuery1.SQL.Text, 'FieldName',
ComboBox1.Text, []);
以上句中的[]﹐是參數的設定處﹐此句中沒有使用到StringReplace函數的參數﹐所以就沒有內容了﹐不需要填內容﹒此函數相關的參數如下﹕
[rfReplaceAll]﹕全部替代﹐若無此參數﹐只對第一次出現的字串做替代
[rfIgnoreCase]﹕忽略大小寫﹐若無此參數﹐則將大小寫視為不同
兩者合并[rfReplaceAll, rfIgnoreCase]﹕就是把上面兩種參數的作用一起用﹒ =================================
有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗
================================
------
忻晟 |
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 您是使用BDE﹐其不支援Parameter屬性﹐請改成如下﹕
begin form1.Query1.Close; form1.Query1.SQL.Clear; form1.Query1.SQL.Add('Select * From wssks Where '); form1.Query1.SQL.Add('FieldName Between :temp1 and :temp2'); form1.Query1.SQL.Text := StringReplace(form1.Query1.SQL.Text, 'FieldName', ComboBox1.Text, []); form1.Query1.ParamByName('temp1').Value := Edit1.Text;//不要引號 form1.Query1.ParamByName('temp2').Value := Edit2.Text;//不要引號 form1.Query1.Open; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/07/07 12:27:31
------
忻晟 |
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
form1.Query1.Close;
form1.Query1.SQL.Clear;
form1.Query1.SQL.Add('Select * From wssks Where ');
form1.Query1.SQL.Add('SKS0010 Between :temp1 and :temp2');//SKS0010是我的欄位名稱
form1.Query1.SQL.Text := StringReplace(form1.Query1.SQL.Text,
'SKS0010', ComboBox1.Text, []);
form1.Query1.ParamByName('temp1').Value := Edit1.Text
form1.Query1.ParamByName('temp2').Value := Edit2.Text;
form1.Query1.Open; 以上是我的程式碼,但還是有這樣的錯誤.. < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=23329155&CC=521745">
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
cashxin2002你好...以下是您之前告訴我的程式碼... form1.Query1.Close;
form1.Query1.SQL.Clear;
form1.Query1.SQL.Add('Select * From wssks ');
form1.Query1.SQL.Add('Where SKS0010 Between :temp1 and :temp2');
form1.Query1.SQL.Text := StringReplace(form1.Query1.SQL.Text,
'SKS0010', ComboBox1.Text, []);
form1.Query1.ParamByName('temp1').Value := Edit1.Text;
form1.Query1.ParamByName('temp2').Value := Edit2.Text;
form1.Query1.Open;
因我不知道comboBox的項目如何去指定欄位...
所以會一直出錯...
以下是我的介面..
我該如何設定呢?
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 需要先用程式碼控制將目前所有的欄位名稱加入到ComboBox中﹐然后再經由使用者的選擇來進行查詢﹒
在Form的OnCreate事件﹕ begin ComboBox1.Items.Clear; Query1.GetFieldNames(ComboBox1.Items); end; 然后再[确定]按鈕中開始查詢﹕ begin if ComboBox1.Text = '' then ShowMessage('請先選擇類別') else begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select * From wssks '); Query1.SQL.Add('Where SKS0010 Between :temp1 and :temp2'); Query1.SQL.Text := StringReplace(form1.Query1.SQL.Text, 'SKS0010', ComboBox1.Text, []); Query1.ParamByName('temp1').Value := Edit1.Text; Query1.ParamByName('temp2').Value := Edit2.Text; Query1.Open; end; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/07/08 09:12:56
------
忻晟 |
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ Query1沒有指定SQL敘述造成的錯誤﹐改成如下﹕
在Form的OnCreate事件﹕ begin Query1.Close; Query1.SQL.Add('Select * From wssks'); ComboBox1.Items.Clear; Query1.GetFieldNames(ComboBox1.Items); end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 如果還是同之前的ComboBox一樣需要在程式中將資料表欄位一個個加入的話﹐建議您使用RadioGroup元件﹐其使用方法同ComboBox元件一樣﹐也是通過Items屬性來將資料表欄位名稱加入﹒
在Form的OnCreate事件﹕ begin Query1.Close; Query1.SQL.Add('Select * From wssks'); RadioGroup.Items.Clear; Query1.GetFieldNames(RadioGroup.Items); RadioGroup1.ItemIndex := -1; end; 然后再[确定]按鈕中開始查詢﹕ begin if RadioGroup1.ItemIndex = -1 then ShowMessage('請先選擇類別') else begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select * From wssks '); Query1.SQL.Add('Where SKS0010 Between :temp1 and :temp2'); Query1.SQL.Text := StringReplace(form1.Query1.SQL.Text, 'SKS0010', RadioGroup1.Items[RadioGroup1.ItemIndex, []); Query1.ParamByName('temp1').Value := Edit1.Text; Query1.ParamByName('temp2').Value := Edit2.Text; Query1.Open; end; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |