当前位置:主页>销售管理软件> 列表

ACCESS时间查询问题

仓库管理软件版1楼: SELECT *
FROM v_GetDetail_Ware
WHERE GDS_ID = 10 and
(datevalue(GDPostTime) > #2005-10-03# OR
( datevalue(GDPostTime) = #2005-10-03# AND timevalue(GDPostTime) >= #08:26:15 #) );
这条sql语句在access中能够执行,但是在delphi中却报错!#2005-10-03#日期格式没有问题,这个时间#08:26:15#格式在delphi中抱错,
我在delphi中的代码:
sql.Add(''select * from v_GetDetail_Ware where GDS_ID = ''+ inttostr(pri_SID) +
'' and (datevalue(GDPostTime) > '' +#35+pub_date+#35 + '' OR (''+
'' datevalue(GDPostTime) = '' +#35+pub_date+#35 + '' AND '' +
'' timevalue(GDPostTime) >= '' + #35+pub_time+#35 +'') )'') ;

我测试可以使用这种写法通过:
sql.Add(''select * from v_GetDetail_Ware where GDS_ID = ''+ inttostr(pri_SID) +
'' and (datevalue(GDPostTime) > '' +#35+pub_date+#35 + '' OR (''+
'' datevalue(GDPostTime) = '' +#35+pub_date+#35 + '' AND '' +
'' timevalue(GDPostTime) >= '' + #39+pub_time+#39 +'') )'') ;

但是时间用''00:00:00''这种格式查询的值不是想要的。
使用参数的方法也试过了,还是抱错,
请问ACCESS中时间也是#00:00:00#这种格式吗,帮忙看看怎么改这条sql语句

2楼: 在sqlserver上的这个语句在access上如何写?折磨我好长时间了,多谢
''select * from 表 where 时间字段 between 开始时间 end 结束时间''
时间格式为''yyyy-mm-dd hh:mm:ss'' 如进销存明细表

3楼: 在SQLServer上的时间表示不是#.....#,可以是''......''
你测试一下就可以了
以上的SELECT 可以实现为数据库过程
---------再就是可能与操作系统的表示时间方式有关,看上面的SQL语句,用到的是“长时间格式”

4楼: 解决:使用加参数的方法,参数要设置类型为日期时间型
Parameters.ParamByName(''pub_datetime'').DataType := ftDateTime ;
Parameters.ParamByName(''pub_datetime'').Value := strtodatetime(pub_date+'' ''+pub_time) ;

5楼: 例如:
要查询在数据库中匹配的日期
方法一:
dm_1.AQ_mj_srech.SQL.Add('' and y_mj_flow.[datetimes]>=:a and y_mj_flow.[datetimes]<=:b'');


dm_1.AQ_mj_srech.Parameters.ParamByName(''a'').Value:=FormatDateTime(''yyyy-MM-dd hh:mm:ss'',strtodatetime(datetostr(rzdatetimepicker1.DateTime)+'' 00:00:01''));
dm_1.AQ_mj_srech.Parameters.ParamByName(''b'').Value:=FormatDateTime(''yyyy-MM-dd hh:mm:ss'',strtodatetime(datetostr(rzdatetimepicker2.DateTime)+'' 23:59:59'')); 方法二:
procedure TForm1.Button2Click(Sender: TObject);
begin
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add(''select * from table1 where 1=1'');
if checkbox1.Checked then
begin
adoquery1.SQL.Add('' and ''+Format(''出生日期>=#%s#'', [DateToStr(DateTimePicker2.DateTime)])+''and '');
adoquery1.SQL.Add(Format(''出生日期<=#%s#'', [DateToStr(DateTimePicker1.DateTime)]));
end;
adoquery1.Open;
end;

方法二:

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
adoquery1.Close;
adoquery1.sql.Clear;
s:=''select * from table1 where 出生日期>=''+''''''''+FormatDateTime(''yyyy-MM-dd hh:mm:ss'',strtodatetime(datetostr(DateTimePicker1.DateTime)+'' 00:00:01''))+''''''''+
'' and 出生日期<=''+''''''''+FormatDateTime(''yyyy-MM-dd hh:mm:ss'',strtodatetime(datetostr(DateTimePicker2.DateTime)+'' 23:59:59''))+'''''''';
showmessage(s);
adoquery1.SQL.Add(s);
adoquery1.Open;
end;

6楼: 多人接受答案了。