不知道你要做什么?那我就乱来吧select * from tablename where field_datetime is nullformatdatetime()/
解决方案 »
- 为什么我在LABEL里写了字却在显示的时候横过来了!
- 为什么我不能在IntraWeb下引用DataModule1,有详细的操作步骤!!!!这个问题已经困扰多时了 :-<帮帮我吧
- 编程偶得:一组日期处理函数
- stringGrid如何让一列不显示,但可以读取那一列的数据?
- 跪求大家帮助----请问我怎么才能实现这个多媒体演示系统呢,急!
- 高分相送,预警提示的问题.
- 根据combox下拉的内容,在listview中显示相关的数据问题(我是新手)
- Delphi5的Code Insight的问题?例如我键入Query1.Ope时,弹出的下拉框不是Open
- 当WOW遭遇山口山……
- 各位DELPHI程序员, 请问你们在面试时都要回答一些什么问题?
- 在delphi 里面的sql语句 如何实现按日期查询?
- 不在任务栏显示当前任务,怎么办?
VAR
A1:STRING
BEGIN
IF EDIT1.TEXT='' THEN A1:='' ELSE A1:='DATETIME ='''+EDIT1.TEXT+'''';
A1:='SELECT * FROM YGJD WHERE '+A1;
ADOQUERY1.CLOSE;
ADOQUERY1.SQL.CLEAR;
ADOQUERY1.SQL.ADD(A1);
ADOQUERY1.OPEN;
END;
产生异常为:SYNTAX ERROR CONVERTING DATETIME FROM CHARACTER STRING 语法错误的转换,
这应如可解决呢.
A1:STRING
BEGIN
IF EDIT1.TEXT='' THEN A1:='' ELSE A1:='DATETIME ='+EDIT1.TEXT;
A1:='SELECT * FROM YGJD WHERE '+A1;
ADOQUERY1.CLOSE;
ADOQUERY1.SQL.CLEAR;
ADOQUERY1.SQL.ADD(A1);
ADOQUERY1.OPEN;
END;试一试
'SELECT * FROM YGJD WHERE ', 这样的语句肯定是不行的。我猜想你的意思是EDIT1.TEXT=''时就查询全部的数据,那应该这样写:
A1:='SELECT * FROM YGJD';
IF Length(Trim(EDIT1.TEXT))>0 THEN
A1 := A1 + ' WHERE DATETIME='''+EDIT1.TEXT+'''';不过当EDIT1.TEXT不为空时这样也未必对,c_hk(小李抢刀)说得也不尽对,因为有些数据库的日期常数不是这样的,如我所知的QEODBC是用花括号{}括起来的:{1991/01/23},而ORACLE必须用TO_DATE函数:TO_DATE('1991-01-23','YYYY-MM-DD')。不过如果你对格式有把握,也是可以的。
我在写一个“通用数据库查询系统”时,需要用SQL对一个日期型字段进行查询,突然发现Delphi没有日期型变量,在Foxpro中一对大括号{}就表示这是个日期型变量,而在Delphi中我竟然不知道如何表示。羞愧之余,到处找资料、查信息。
先是看到在Delphi FAQ中言之凿凿地说可以用:where aDate:=#01/01/99#或是 where aDate:=“01/01/99”来查找,赶紧试一下,报语法错;后又在Delphi Chat中看到一位朋友说可以用如下语句来查找:where aDate:=Cast(‘01/01/99’ as Date);又连忙试一下,哈,没有出错了,而且有返回的记录,哈哈哈……,还没笑完,眼睛随便瞟了一眼结果就笑不出来了,因为结果完全不对,查出的结果的日期全为0000-00-00,这是怎么回事?赶快查SQL语言的书,说Cast是用来进行类型转换的,如果类型转换不正确的话并不会提示出错,而是返回一个无效值。看来,我就是碰到了类型转换不正确。拍了半天脑袋,灵机一动,是不是日期类型的格式不对,查看了一下Delphi显示的数据库中的日期型字段,发现它的格式是1999-9-20,我用的SQL语句是:where aDate:=Cast(‘99-9-20’ as Date);应该不会错,可是它的返回结果如何解释呢?为什么别人都可以正确运行,而我就是不行呢?实在没办法了,抱着死马当活马治的心情,调出WIN98的控制面板中区域设置,选中“日期”页,将其日期分隔符由“-”改为“/”,然后再来试运行:select * from aDataBase where aDate:=Cast(‘09/20/99’ as Date);哈哈,出来结果了,而且完全正确,我简直笑得涕泪横流。闹了半天,原来只是一个小小的日期分隔符在做怪。
通过进一步试验,发现不管系统的短日期格式设成怎样,SQL语句都必须写成where aDate:=Cast(‘09/20/99’ as Date),为什么呢?嘿嘿,我也不知道!