比如下面的程序段
qryLSCX.SQL.Add('select * from JC where 1=1 ');
qryLSCX.SQL.Add(' and JC_SJ > :pSJ');
qryLSCX.ParamByName('pSJ').AsDateTime := dtpQS.DateTime; //取datetimepicker中的日期时间
我想取大于某个日期时间的数据,为什么查到的结果不是我想要的,而是全部数据。看坛子上也看了不少类似的帖子,试了试似乎没用。(DELPHI 7 +SQL+BDE)
特请教各位,就以上面的程序为例吧,如何实现我想要的功能呢?
qryLSCX.SQL.Add('select * from JC where 1=1 ');
qryLSCX.SQL.Add(' and JC_SJ > :pSJ');
qryLSCX.ParamByName('pSJ').AsDateTime := dtpQS.DateTime; //取datetimepicker中的日期时间
我想取大于某个日期时间的数据,为什么查到的结果不是我想要的,而是全部数据。看坛子上也看了不少类似的帖子,试了试似乎没用。(DELPHI 7 +SQL+BDE)
特请教各位,就以上面的程序为例吧,如何实现我想要的功能呢?
var
S: String;
begin
S := QuotedStr(FormatDataTime('YYYY-MM-DD hh:nn:ss', dtpQS.DateTime));
//如果是Access要这样S := FormatDataTime('#YYYY-MM-DD hh:nn:ss#', dtpQS.DateTime);
qryLSCX.SQL.Add('select * from JC where 1=1 ');
qryLSCX.SQL.Add(' and JC_SJ > '+S);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text :=formatdatetime('yyyy/mm/ss hh:mm:ss',now);
end;
begin
edit1.Text :=formatdatetime('yyyy/mm/ss hh:mm:ss',DateTimePicker1.date);
end;
qryLSCX.SQL.Add(' and JC_SJ > :pSJ');
qryLSCX.ParamByName('pSJ').AsDateTime := dtpQS.DateTime; //取datetimepicker中的日期时间 你这样写是没有问题的,你先看看数据库中的JC_SJ的数据类型及数据值是什么。
可以把sql截出来,在查询分析器中执行一下,把这个dtpQS.DateTime这个的具体值代进去看看结果。
比如“select * from #table where time>'2008-04-25'”
当然2008-04-25可以换成你的变量,但要用单引号拼接起来
qryLSCX.SQL.Add('select * from JC where 1=1 ');
qryLSCX.SQL.Add(' and JC_SJ > :pSJ');
qryLSCX.ParamByName('pSJ').Value := FormatDataTime('YYYY-MM-DD', dtpQS.DateTime);
begin
Close;
SQL.Clear;
SQL.Add('select * from JC where 1=1 ');
SQL.Add(' and JC_SJ > :pSJ');
ParamByName('pSJ').Value := FormatDataTime('YYYY-MM-DD', dtpQS.DateTime);
Open
end;
TDateTime = type Double;
TDate = type TDateTime;当你通过BDE/ADO向数据库提交带参数的SQL语句时,如果该参数的类型为日期时间型,就会有一个类型转换的问题。
就是要把Delphi中的日期时间类型(就是一个浮点数,整数部分为日期,小数部分为时间)转换为对应数据库的日期时间类型
如果这样写
qryLSCX.ParamByName('pSJ').AsDateTime := dtpQS.DateTime;
那么这个转换将由BDE/ADO和相应的数据ODBC/OLE DB接口模块(驱动程序)自动完成。由于不同厂商的数据库及数据库接口(ADO/BDE,及ODBC/OLE DB/.NET数据库接口/JDBC等)在日期时间类型实现方式以及之间转换的不兼容性,导致在使用时经常遇到问题。
比如一段代码在MS-SQL数据库上可以正常执行,如果把数据换成DB2,则出现错误;DB2可以,再换成Oracle,换成Access,又要重新调试,等等这种情况,省事的办法可以不用带参数的SQL语句,直接拼好SQL语句字符串,提交数据库
一般的数据库中日期时间类型写成'2008-4-29 12:00:55'形式都是可以的
当然也有例外,比如Access,可能要写成#2008-4-29 12:00:55#