如何更新query的sql(30分)

  • 主题发起人 主题发起人 鹦鹉
  • 开始时间 开始时间

鹦鹉

Unregistered / Unconfirmed
GUEST, unregistred user!
我想对数据库的显示进行过滤,比如数据库中有时间、客户、产品等字段,我想实现
组合过滤,如显示选中的客户(比如张三)在上半年期间购买酒的记录,
该如何可以自由的选择过滤条件,并且显示过滤结果?
 
query:
sqlstr:=' select * from tablename where (datetime=date) '
if checkbox1.checked then sqlstr:=sqlstr+'and 客户=;kehu'
if checkbox2.checked then...
with query do
begin
clear;
sql.add(sqlstr);
parambyname()
open;

end;
 
可以用带参数的查询实现:
with query1 do
begin
close;
unprepare;
sql.clear;
sql.add('selece * from tablename where 客户=:k and (时间>=:d1 and 时间 <=:d2 ');
if checkbox1.checked then params[0].asstring:='张三';
if checkbox2.checked then
begin
params[1].asdatetime:='2001/01/01';
params[2].asdatetime:='2001/06/30';
end;
prepare;
open;
end;
 
我希望能够自由的组合查询条件,可以不选查询条件,可以只选择一个查询条件,
可以选两个查询条件,比如根据时间和客户查询,也可以单独根据时间查询
 
加个复选框
 
其实就是动态指定 sql语句的参数,南宫慕容, ugvanxk已答的很全了
 
用了param 的参数做查询,如果我不设查询条件,要显示全部记录,
比如sql.add(select * from sellrecord where customer=:c and
(time>=ti and time<=t2) and
seller:=s);
这样的话,如果我不选择查询条件,或者只选择某一个查询条件
那不是c 、t1、 t2、 s 都为'',数据库不能正确显示了么!?
 
同意上面说的。
但我认为:按照不同的查询条件,只用修改不同的sql语句就行了。
先估计共有多少种情况,再用case语句写sql语句和对param赋值。
不妨将整个过程写成一个函数库或过程,方便以后的代码重用。
 
动态修改sql
 
多人接受答案了。
 
后退
顶部