动态SQL语句(50分)

  • 主题发起人 主题发起人 王瑞
  • 开始时间 开始时间

王瑞

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个sql语句
select *
from a
where date between '99-11-01' and '99-11-06'

'99-11-01'和'99-11-01'来自于EDIT1.text和EDIT2.text

在DELPHI怎样写,特别是'号怎样填入到String中
 
这样写:
select *
from a
where date between '':Date1'' and '':Date2''

Query.Params.ParambyName('Date1').AsDatetime := Edit1.Text;
Query.Params.ParambyName('Date2').AsDatetime := Edit2.Text;

 
不对吧?应该去掉单引号:
select * from a where date between :Date1 and :Date2
这样就可以了.
 
JinBo思路对,但SQL还是报错
由于DATA1和DATA2日期需要单引号,怎样加入
 
cakk的对, 不必考虑引号问题, delphi代你考虑了parambyname('...').asdatetime := ....时,
delphpi自动会加入''
 
我不知道你用什么数据库,如果是用MSSQL或Oracle则:
with query1 do
begin
close;
sql.clear;
sql.add('select * from a where date between :Date1 and :Date2');
ParambyName('Date1').AsDate := StrToDate(Edit1.Text);
ParambyName('Date2').AsDate := StrToDate(Edit2.Text);
Open;
end;
不是AsDateTime,而是AsDate。否则就不会有数据显示。
如果用Edit1不行的话,那就用DateTimePicker1,这样:
ParambyName('Date1').AsDate := DateTimePicker1.Date;
ParambyName('Date2').AsDate := DateTimePicker2.Date;
 
对不起,上次输入时比较匆忙,答得不完全。
1、应使用AsDate,当然如果需要比较时间的话使用AsDateTime.
2、SQl的参数不再需要使用'符号,当时只是想回答第二个问题。
3、在定义字符串时如需使用'字符,可以使用('')两个',
 
那个date是TDate型,还是TDateTime(在paradox是timestamp),如是TDatetime
还要考虑时间范围:
ParambyName('Date1').AsDatetime := StrToDatetime(FormatDatetime('yyyy-mm-dd ',DateTimePicker1.Date)+ StrTotime('hh:nn:ss','00:00:00'));

ParambyName('Date2').AsDatetime := StrToDatetime(FormatDatetime('yyyy-mm-dd ',DateTimePicker2.Date)+ StrTotime('hh:nn:ss','23:59:59'));
 
呵呵, 要注意between的内容是date2>=date>=date1, 而且, 如果按照你的sql就得到
1999-11-6 0:0:0:0>=date>=1999.11.1 0:0:0:0, 所以, 1999-11-6 1:00就不
包括在内. 另外, 1999-11-6 23:59:59:999是有问题的, 会把11月7日的也包括再内,
应该是bug:-( 所以要写成23:59:59:998才正确.
'号用''来代替就可以输入了:-)
sql.text:='select * from a where date between '''+edit1.text+''' and '''+edit2.text+'''';
 
asdate和asdatetime唯一的区别就是asdate时将datetime的时间部分舍去
了, 成为0:00:00. 所以判断时间用asdatetime和用asdate没有多大区别, 自
己处理一下赋给param的datetime的值(trunc掉小数), 就和asdate一样了.
我遇到过有的数据库用parambyname(...).asdate出错. 只能用asdatetime
:)
 
cytown 真厉害,连毫秒都不放过!
嗨,大家注意到了没有,D3中的DateTimePicker构件有BUG,
当你按的不是数字时,再按一下Tab键,会引起死机.
 
请问各位高手,这是什么回事
如果我在程序中动态写入SQL语句(带参数),则出现如下错误
"Invalid Floating Point Operation"
如果在query1的SQL属性中写好并设置好参数的类型,则出现如下错误
"Operation not applicable"

我的后台数据库是MSSQL6.5
 
1、不用加“”
2、不用写Query.params.ParambyName,直接写Query.ParambyName。
3、必须将Edit.Text转化成TDATETIME类型。

select *from a
where date between :Date1 and :Date2

Query.ParambyName('Date1').AsDatetime := strToDate(Edit1.Text);
Query.ParambyName('Date2').AsDatetime := strToDate(Edit2.Text);
 
or:
sql.text:='select * from a where date between to_date('
+edit1.text+',''yy-mm-dd'')' and to_date('+edit2.text
+',''yy-mm-dd'')'
to_date 不知用的可对(忘记了)
 
直接生成SQL语句
SQL.Text:='SELECT * FROM MyTable WHERE MyDate BETWEEN "'
+FormatDateTime('yyyy"-"mm"-"dd',DateTimePicker1.DateTime)+'" AND "'
+FormatDateTime('yyyy"-"mm"-"dd',DateTimePicker2.DateTime)+'"'
不可以吗?


——我很菜,不要笑我
 
多人接受答案了。
 
后退
顶部