这条关于动态日期查询的SQL语句怎么写?(50分)

  • 主题发起人 主题发起人 一辉
  • 开始时间 开始时间

一辉

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个数据库,其别名为tou,其中有一个字段tou_date,类型为Date
查询条件:例如从01/12/2000 到 02/25/2001
我用6个ComboBox控件分别代表2个查询区间年、月、日
ComboBox1、ComboBox4代表年
ComboBox2、ComboBox5代表月
ComboBox3、ComboBox6代表日
初步代码如下,但是报错,谁能帮我改一下?
select * from tou where tou_date >='ComboBox2.items/ComboBox3.items/ComboBox1.items'
and tou_date <='ComboBox5.items/ComboBox6.items/ComboBox4.items'
 
年月日最好用“DateTimePicker”;
语句如下:
Query1.Close;
Query1.Clear;
Query1.SQL.Add(‘Select * from Table Where tou_date>=:a and tou_date<=:b’);
Query1.ParamByName(‘a’).AsDate:=DateTimePicker1;
Query1.ParamByName(‘b’).AsDate:=DateTimePicker2;
Query1.Prepare;
Query1.Open;
 
SQL.Add('select * from tou where tou_date >='+ComboBox2.items.Text+'/'
+'ComboBox3.items.Text+'/'+ComboBox1.items)
 
1、and的优先级要比>=高,你的条件要有()
2、用你的方法来拼凑日期类型如果日期类型不同很可能出错,所以建议你还是用datetimepicker
如果按你的要求可以写成
select * from tou where (tou_date >='''ComboBox2.items/ComboBox3.items/ComboBox1.items''')
and (tou_date <='''ComboBox5.items/ComboBox6.items/ComboBox4.items'+''')'
不过你要注意日期格式
 
dabaosod你好,谢谢你的代码
不过
Query1.ParamByName('a').AsDate:=DateTimePicker1;
Query1.ParamByName('b').AsDate:=DateTimePicker2;
这2句仍然报错:
[Error]Unit.pas(35):Incompatible types:'TDateTime' and 'TDatePicker'
[Error]Unit.pas(36):Incompatible types:'TDateTime' and 'TDatePicker'
能帮我分析一下错误原因吗?
 
Query1.ParamByName('a').AsDateTime:=DateTimePicker1
Query1.ParamByName('b').AsDateTime:=DateTimePicker2
 
DATATIMEPICKER1.DATE
 
query1.parambyname('a').asdate:=datetimepicker1.date;
query1.parambyname('b').asdate;=datetimepicker2.date
 
我的语句珂定正确,你可以试试

query.sql.clear;

query.sql.add('select * from tou');

query.sql.add('where tou_date>='''+ComboBox2.items+'/'+ComboBox3.items+

'/'+ComboBox1.items+'''');

query.sql.add('and tou_date<='''+ComboBox5.items+'/'+ComboBox6.items+

'/'+ComboBox4.items+'''');
 
你可以试试:

with query do
begin
sql.text:=format('select * from tou where tou_date between
'#39'%s/%s/%s'#39'and'#39 '%s/%s/%s'#39,
[ComboBox2.Text,ComboBox3.Text,ComboBox1.Text,
ComboBox5.Text,ComboBox6.Text,ComboBox4.Text]);
Open;
end;
 
是日期型和时间型不兼容的问题,你可参考“sanming”的回复。
 
我看把DATE类型改为CHAR比较好
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
777
import
I
I
回复
0
查看
688
import
I
I
回复
0
查看
700
import
I
I
回复
0
查看
996
import
I
后退
顶部