一个日期查询的问题

寒雪叔叔 2006-02-21 03:44:06
我的程序片断是这样的:
strStart := '#2005-12-1 00::00::00#';
strEnd := '#2005-12-10 23::59::59#';
strSql := 'select * from PrintSave where printtime between ' + strStart + ' and ' + strEnd;
queryPrintSave.SQL.Clear;
queryPrintSave.SQL.Text := strSql;
queryPrintSave.Open(); //出错!!

出错信息是: Select 字句中包含一个保留字、拼写错误或丢失参数或标点符号不正确。
运行时我看到strSql的值是:
select * from PrintSave where printtime between #2005-12-1 00::00::00# and #2005-12-10 23::59::59#
错在哪里,我真是搞不明白了, 在SQL资源管理器里面运行(把冒号改成单冒号)时一切正常
然后我又用了另一种参数的办法:
strStart := '#2005-12-1 00:00:00#';
strEnd := '#2005-12-10 23:59:59#';
strSql := 'select * from PrintSave where printtime between :p1 and :p2'
queryPrintSave.SQL.Clear;
queryPrintSave.SQL.Text := strSql;
queryPrintSave.Parameters.ParamByName('p1').Value := strStart;
queryPrintSave.Parameters.ParamByName('p2').Value := strEnd;
queryPrintSave.Open; //出错!!
这次出错的提示与上次的一模一样。

问题出在哪?
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
寒雪叔叔 2006-02-22
  • 打赏
  • 举报
回复
哦,不好意思, 是我贴错了, 报歉啊, 那我先给分吧
是我在程序中写的Select Count(*) as Count...这里错了, 我把这里改为
select count(*) as nNum就对了, 可能是因为Count是delphi的什么关键字吧!
dulei115 2006-02-22
  • 打赏
  • 举报
回复
strStart := '2005-12-1 00:00:00';
strEnd := '2005-12-10 23:59:59';
strSql := 'select * from PrintSave where printtime between ''' + strStart + ''' and ''' + strEnd + '''';
queryPrintSave.SQL.Clear;
queryPrintSave.SQL.Text := strSql;
queryPrintSave.Open;
78hgdong 2006-02-21
  • 打赏
  • 举报
回复
更正: 上面写错了....

问题简单啦,把#和between去掉,加=号就OK了...已经测试过..可行...

strStart := '2005-12-1 00:00:00';
strEnd := '2005-12-10 23:59:59';
strSql := 'select * from PrintSave where printtime=:p1 and printtime=:p2'
queryPrintSave.SQL.Clear;
queryPrintSave.SQL.Text := strSql;
queryPrintSave.Parameters.ParamByName('p1').Value := strStart;
queryPrintSave.Parameters.ParamByName('p2').Value := strEnd;
queryPrintSave.Open;
78hgdong 2006-02-21
  • 打赏
  • 举报
回复
问题简单啦,把#去掉就OK了...已经测试过..可行...

strStart := '2005-12-1 00:00:00';
strEnd := '2005-12-10 23:59:59';
strSql := 'select * from PrintSave where printtime between :p1 and :p2'
queryPrintSave.SQL.Clear;
queryPrintSave.SQL.Text := strSql;
queryPrintSave.Parameters.ParamByName('p1').Value := strStart;
queryPrintSave.Parameters.ParamByName('p2').Value := strEnd;
queryPrintSave.Open;
寒雪叔叔 2006-02-21
  • 打赏
  • 举报
回复





老大们, 你们回答问题不负责任唆, 也不先试试就下结论.不对头啊!!!




janezjtjdx 2006-02-21
  • 打赏
  • 举报
回复
strSql := 'select * from PrintSave where printtime between ''' + strStart + ''' and ''' + strEnd++'''';
strStart 和strEnd是字符串类型的.
dulei115 2006-02-21
  • 打赏
  • 举报
回复
strStart := '2005-12-1 00:00:00';
strEnd := '2005-12-10 23:59:59';
strSql := 'select * from PrintSave where printtime between ''' + strStart + ''' and ''' + strEnd;
queryPrintSave.SQL.Clear;
queryPrintSave.SQL.Text := strSql;
queryPrintSave.Open; //出错!!

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧