带参数查询错误 ( 积分: 50 )

  • 主题发起人 主题发起人 Gingerzy
  • 开始时间 开始时间
G

Gingerzy

Unregistered / Unconfirmed
GUEST, unregistred user!
1:
s_dtToday := '#' + Formatdatetime('YYYY-M-D',Now) + '#';
with AdoQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('SELECT ');
Sql.Add('B.Cstm_Name ');
Sql.Add('FROM T_RemindData A ');
Sql.Add(' LEFT JOIN T_Order B ON A.Oder_ID=B.Oder_ID ');
Sql.Add(' WHERE LEFT(A.Rmdt_Date,10) = '+s_dtToday);
Open;
end;

2:
with AdoQuery1 do
begin
Close;
Sql.Clear;
Sql.Add('SELECT ');
Sql.Add('B.Cstm_Name ');
Sql.Add('FROM T_RemindData A ');
Sql.Add(' LEFT JOIN T_Order B ON A.Oder_ID=B.Oder_ID ');
Sql.Add(' WHERE LEFT(A.Rmdt_Date,10) = :rmdtDate ');
Parameters.ParamByName('rmdtDate').Value := '#' + Formatdatetime('YYYY-M-D',Now) + '#';
Open;
end;

为什么1可以得到结果2却不行呢,delphi6+access 谢谢!
 
我觉得是可以的
你可以把错误贴出来看看
 
程序运行没有错误,但1查询不到数据用2可以,数据库里是有数据的。
 
可能是Delphi识别出#+FomateDateTime('yyyy-m-dd',Now) + '#'为日期格式,将其转换成Float了
 
用两个showmessage(AdoQuery1.SQL.Text)比较一下语句就明白了
 
我曾经也遇到过与楼主类似的问题,需要在第二代码中使用以下语句指定参数类型
Parameters.ParamByName('rmdtDate').DataType := ftDateTime;
 
用参数的时候直接把日期型的数据传过去就行了,不用加#号。
 
楼上的,ACCESS要加'#'进行时间查询的,看来,你的问题应该是时间格式匹配问题.用formatdatetime进行时间格式化看看.
 
Parameters.ParamByName('rmdtDate').Value := '#' + Formatdatetime('YYYY-M-D',Now) + '#';
这句有问题,你注意左边和右边数据,跟踪看看.
 
多人接受答案了。
 
后退
顶部