我做一个查询时遇到的问题! 再加100分!!! (100分)

  • 主题发起人 主题发起人 太保球
  • 开始时间 开始时间

太保球

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做一个查询的时候想实现多值动态查询,既有正常记录的查询,也有日期的查询,
还有条件查询,通过=,>.<来实现条件查询,可是我的语句不能实现,编译还能通过
,就是执行的时候抱错,希望大家给修改一下,
谢谢!!!

procedure TForm1.BitBtn1Click(Sender: TObject);
var aSQL,sign:string;
begin
if combobox2.text<>'' then aSQL:='and 货品类型="'+combobox2.text+'" ';
if combobox3.text<>'' then aSQL:=aSQL+ 'and 进货方式="'+combobox3.text+'" ';
if checkbox1.Checked then aSQL:=aSQL+ 'and 进货时间=:d1';
case ComboBox1.ItemIndex of
0: sign:='=';
1: sign:='>';
2: sign:='<';
end;
if checkbox2.Checked then aSQL:=aSQL+'and 进货数量="'+sign+'","'+Edit3.Text+'"';
if asql<>''then
begin
query1.close;
query1.SQL.Clear;
query1.sql.text:='select * from jin.db where 货品类型<>"" '+asql;
if checkbox1.Checked then
begin
Query1.ParambyName('d1').asdate:=DateTimePicker1.Date;
end;
query1.prepare;
query1.Open;
end;

end;
 
是这样,你的程序编译是否有问题,如果没问题的话,在
query1.prepare
后加上一句
query1.savetofile('d:/debug.txt');
打开这个文件看看sql是否有问题
Good Luck

 
对于引号,应该是两个单引号表示引号,而不是司用一个双引号
你的问题应该在这里
 
楼上说得对。
 
if checkbox2.Checked then aSQL:=aSQL+'and 进货数量="'+sign+'","'+Edit3.Text+'"';
~~~~~~~~~~~~
改改
if checkbox2.Checked then aSQL:=aSQL+'and 进货数量'+sign+'"'+Edit3.Text+'"';

 
没有细看,你可以把sqltext 显示出来看看.估计也应该是引号的问题.
另外你可以将sql中的引号用Quotedstr函数来代替,这样就不会把sql
中应该有的引号和表示是字符串的引号混在一起了.

例如sql是 select * from table1 where field1='a'
在delphi中可以写成
str := 'select * from table1 where field1=' + QuotedStr('a');
这样在写比较长的sql语句时不容易出错.
 
同意天真的看法
如果还不行的话,要回过头看看你的数据库(如果用的paradox修复一下)
 
改一下這几句看看:
1.aSQL:=' and 货品类型="'+combobox2.text+'" ';改為
aSQL:=' and 货品类型='''+combobox2.text+'''';
//and前空一格,combobox2.text的左邊3個單引號,右邊4個單引號
2.aSQL:=aSQL+ ' and 进货方式="'+combobox3.text+'" ';改為
aSQL:=aSQL+ ' and 进货方式='''+combobox3.text+'''';
//and前空一格,combobox3.text的左邊3個單引號,右邊4個單引號
3.aSQL:=aSQL+ 'and 进货时间=:d1';改為
aSQL:=aSQL+ ' and 进货时间=:d1';
//and前空一格
3.aSQL:=aSQL+' and 进货数量="'+sign+'","'+Edit3.Text+'"'改為:
aSQL:=aSQL+' and 进货数量'+sign+''''+Edit1.Text+'''';
//and前空一格,sign左邊1個單引號,右邊4個單引號,edit1.text右邊4個單引號
4.query1.sql.text:='select * from jin.db where 货品类型<>"" '+asql;改為
query1.sql.text:='select * from jin.db where 货品类型<>'''''+asql;
//不等號后為5個單引號
注意,Sql語句中不能出現有雙引號。







 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
642
import
I
后退
顶部