複合查詢(like) |
答題得分者是:ko
|
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
請問各位前輩 若希望能查詢符合ID前兩碼之資料 應該如何改
procedure TForm10.Button1Click(Sender: TObject);
begin
DataSource1.DataSet := Query1;
DBGrid1.DataSource := DataSource1;
with Query1 do
begin
DataBaseName := 'Sale';
Close;
SQL.Clear;
SQL.Add('Select * from Member where ID = :ID ');
Params[0].DataType := ftString;
Params[0].ParamType := ptInput;
Params[0].Value := Edit1.Text;
Prepare;
Open;
end;
end;
|
anderslee
初階會員 發表:2 回覆:32 積分:26 註冊:2002-06-03 發送簡訊給我 |
|
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
1.輸入欄位本來就不用加入%,而是應該加入你的SQL語法...
比如你要以輸入欄位查前幾碼的話應該是這樣..
SQL.Add('Select * from Member where ID LIKE ' #39 Edit1.text #39 '%');
//Edit1是輸入欄位
2.有關日期.你可能會有二個日期輸入欄位吧..
SQL.Add('Select * from Member where xx BETWEEN ' #39 Edit2.text #39 ' AND ' #39 Edit3.text #39);
// xx是你的Table要查詢的日期欄位..Edit2,Edit3是日期輸入欄位
自己再組合一下你要的條件吧..
有問題在POST上來..還有不知道你的DataBase是什麼..上述方法在MSSQL及Oracle可以...
引言: 有沒有什麼方法 在輸入欄位中只輸入前幾碼而不用加% 另在表格欄位中有加入日期此一欄位 若要查詢幾年幾月幾號 到 幾年幾月幾號(如 2002/11/01 -2002/12/15) 用 between 的方式要如何使用 也就說可以查全部符合此日期 也可以查抹編號符合此日期 上面問題麻煩各位前輩發表人 - chih 於 2002/12/07 13:16:04 |
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
chin您好
我用的資料庫為Access 按照您的範例會出現錯誤
List index out of bounds(0)
程式如下
procedure TForm11.Button1Click(Sender: TObject);
begin
DataSource1.DataSet := Query1;
DBGrid1.DataSource := DataSource1;
with Query1 do
begin
DataBaseName := 'Sale';
Close;
SQL.Clear;
SQL.Add('Select * from Member where Consumer BETWEEN ' #39 Edit1.text #39 ' AND ' #39 Edit2.text #39);
Params[0].DataType := ftString;
Params[0].ParamType := ptInput;
Params[0].Value := Edit1.Text;
Params[0].Value := Edit2.Text;
Prepare;
Open;
end;
end;
不知問題出在哪裡(包括之前會員資料的部分一樣->ID)
另 #39代表什麼意思
麻煩您 謝謝您
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
引言: chin您好 我用的資料庫為Access 按照您的範例會出現錯誤 List index out of bounds(0) 程式如下 procedure TForm11.Button1Click(Sender: TObject); begin DataSource1.DataSet := Query1; DBGrid1.DataSource := DataSource1; with Query1 do begin DataBaseName := 'Sale'; Close; SQL.Clear; SQL.Add('Select * from Member where Consumer BETWEEN ' #39 Edit1.text #39 ' AND ' #39 Edit2.text #39); Params[0].DataType := ftString; Params[0].ParamType := ptInput; Params[0].Value := Edit1.Text; Params[0].Value := Edit2.Text; Prepare; Open; end; end; 不知問題出在哪裡(包括之前會員資料的部分一樣->ID) 另 #39代表什麼意思 麻煩您 謝謝您Hello larryleu 您好: 紅色部分刪除, #39=一個點 ' 我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
引言: SQL.Add('Select * from Member where Consumer BETWEEN ' #39 Edit1.text #39 ' AND ' #39 Edit2.text #39);其中' #39 Edit1.text #39 ' AND ' #39 Edit2.text #39 更改 #39 ''Edit1.text'' #39 AND #39 ''Edit2.text'' #39 發表人 - ko 於 2002/12/09 12:46:34
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
larryleu你好:
我分2個部分來說明:
1.like
With SQLQuery Do
begin
Close;
SQL.Clear;
SQL.Add(''Select * from Member where ID like :ID ');
ParamByName('ID').AsString:='%' NameEdit.Text '%';
Open;
end; 這樣就會找id有相同NameEdit.Text的字串
2.BETWEEN
Sql.Add('Time Between :FirstDate And :EndDate ');
ParamByName('FirstDate').AsDateTime:=DateTimePicker1.Date ;
ParamByName('EndDate').AsDateTime:=DateTimePicker2.Date ; DateTimePicker1是元件
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
我將程式改為下列 出現錯誤訊息
準則運算試的資料型態不符合
在Table中日期(Date)的格式為時間型態
procedure TForm11.Button1Click(Sender: TObject);
begin
DataSource1.DataSet := Query1;
DBGrid1.DataSource := DataSource1;
with Query1 do
begin
DataBaseName := 'Sale';
Close;
SQL.Clear;
SQL.Add('Select * from Consumer where Date BETWEEN ' #39 Edit1.text #39 ' AND ' #39 Edit2.text #39);
Prepare;
Open;
end;
end;
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
Edit1.text是string..你要自己把他轉成你要的日期型態阿...
比如Edit1.text='20021209'..你要先手動轉成這樣'2002/12/09'..
而不是直接給Edit1.text..才符合日期型態阿...
不然你就直接用DateTimePicker來取代Edit1...
引言: 我將程式改為下列 出現錯誤訊息 準則運算試的資料型態不符合 在Table中日期(Date)的格式為時間型態 procedure TForm11.Button1Click(Sender: TObject); begin DataSource1.DataSet := Query1; DBGrid1.DataSource := DataSource1; with Query1 do begin DataBaseName := 'Sale'; Close; SQL.Clear; SQL.Add('Select * from Consumer where Date BETWEEN ' #39 Edit1.text #39 ' AND ' #39 Edit2.text #39); Prepare; Open; end; end;發表人 - chih 於 2002/12/09 15:34:05 |
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
|
ko
資深會員 發表:28 回覆:785 積分:444 註冊:2002-08-14 發送簡訊給我 |
引言: ko您好 謝謝您 最後還有一個問題想請教您 如何處理下列狀況 1)同時輸入編號及日期 選出符合的資料 2)只輸入日期而不輸入編號 選出符合資料 因為這兩種況況都會發生 另DateTimePicker所搜尋之時間點為何時 是以當日凌晨開始 還是以輸入時間為準 因為同樣式今天所Key in之資料 卻要將第一時間提前一天才找的到資料 最後謝謝您with select do begin close; Sql.Clear; Sql.Add('select *'); Sql.Add('from Consumer where id<>0'); if Edit1.Text<>'' then//這裡是找Edit1.Text有沒有值 begin Sql.Add('and id like :Q0 '); ParamByName('Q0').AsString:=Edit1.Text; end; Sql.Add('and between :q1 and :q2'); ParamByName('q1').AsDateTime:=DateTimePicker1.DateTime-1; ParamByName('q2').AsDateTime:=DateTimePicker1.DateTime; open; end; 紅色部分 有沒有值--因為是if 判斷所以空值他就不會執行begin ..end所以只執行日期的 查詢! -1代表DateTimePicker1的日期減一天
------
====================== 昏睡~ 不昏睡~ 不由昏睡~ |
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
ko您好
不好意思又要麻煩您我將程式改為如下 卻發生錯誤訊息 不知哪裡寫錯
procedure TForm11.Button4Click(Sender: TObject);
begin
DataSource1.DataSet := Query1;
DBGrid1.DataSource := DataSource1;
with Query1 do
begin
DataBaseName := 'Sale';
close;
Sql.Clear;
Sql.Add('select * ');
Sql.Add('from Consumer where Reco_Number<>0');
if Edit1.Text <> '' then //這裡是找Edit1.Text有沒有值
begin
Sql.Add('and Reco_Number like :Reco_Number ');
ParamByName('Reco_Number').AsString := Edit1.Text;
end;
Sql.Add('and between :FirstDate and :EndDate');
ParamByName('FirstDate').AsDateTime := DateTimePicker1.DateTime - 1;
ParamByName('EndDate').AsDateTime := DateTimePicker1.DateTime;
open;
end; end;
|
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
KO您好
謝謝您可以執行 但搜尋不到資料 麻煩您 謝謝
procedure TForm11.Button4Click(Sender: TObject);
begin
DataSource1.DataSet := Query1;
DBGrid1.DataSource := DataSource1;
with Query1 do
begin
DataBaseName := 'Sale';
close;
Sql.Clear;
Sql.Add('select * ');
Sql.Add('from Consumer where Reco_Number');
if Edit1.Text <> '' then //這裡是找Edit1.Text有沒有值
begin
Sql.Add('and Reco_Number like :Reco_Number ');
ParamByName('Reco_Number').AsString := '%' Edit1.Text '%';
end;
Sql.Add('and Date between :FirstDate and :EndDate');
ParamByName('FirstDate').AsDateTime := DateTimePicker1.DateTime ;
ParamByName('EndDate').AsDateTime := DateTimePicker1.DateTime;
open;
end; end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |