注册 登录
编程论坛 Delphi论坛

[求助]ora查询的问题

leo_kp 发布于 2006-06-01 21:50, 2687 次点击
我用delphi与oralce连接的
R_IQuery.SQL.Add(' where wds.st_river_r.stcdt=strtoint(QHStanmCmb.text) and YMDHM>=to_date("2000-12-12 08:00:00","yyyy-mm-dd hh24:mi:ss")+'
+'and ymdhm<=to_date("2004-12-10 08:00:00","yyyy-mm-dd hh24:mi:ss") order by YMDHM ');
但程序执行时出现下列异常:ora-00936
谁知道怎么改的就请帮下忙
15 回复
#2
leo_kp2006-06-01 21:51
可能就是上面查询的问题
#3
leo_kp2006-06-01 21:53
以下是引用leo_kp在2006-6-1 21:50:00的发言:
我用delphi与oralce连接的
R_IQuery.SQL.Add(' where wds.st_river_r.stcdt=strtoint(QHStanmCmb.text) and YMDHM>=to_date("2000-12-12 08:00:00","yyyy-mm-dd hh24:mi:ss")+'
+'and ymdhm<=to_date("2004-12-10 08:00:00","yyyy-mm-dd hh24:mi:ss") order by YMDHM ');
但程序执行时出现下列异常:ora-00936
谁知道怎么改的就请帮下忙

是ora-00936 缺少表达式

#4
leo_kp2006-06-02 14:07
怎么没有人会吗 ?
#5
xu20002006-06-02 18:21
改成下面的试试
R_IQuery.SQL.Add(' where wds.st_river_r.stcdt='+strtoint(QHStanmCmb.text)+' and YMDHM>=to_date("2000-12-12 08:00:00","yyyy-mm-dd hh24:mi:ss")+'
+'and ymdhm<=to_date("2004-12-10 08:00:00","yyyy-mm-dd hh24:mi:ss") order by YMDHM ');
我怎么没看到select语句呢?你保证它没有问题?
#6
leo_kp2006-06-02 19:11
我改了的
不行
wds.st_river_r_stcdt是数字类型的
R_IQuery.SQL.Add('select STCDT,YMDHM,ZR,Q');
R_IQuery.SQL.Add('from WDS.ST_RIVER_R');
R_IQuery.SQL.Add('where WDS.ST_RIVER_R.STCDT=strtoint(QHStanmCmb.text) and WDS.ST_RIVER_R.YMDHM>=to_date("2000-12-12 08:00:00","yyyy-mm-dd hh24:mi:ss")+'
+'and WDS.ST_RIVER_R.ymdhm<=to_date("2004-12-10 08:00:00","yyyy-mm-dd hh24:mi:ss") order by WDS.ST_RIVER_R.YMDHM');
#7
leo_kp2006-06-02 19:14

上面的执行了后执行R_IQuery.open;
就会出现那个错误:ora-00936:缺少表达式

#8
leo_kp2006-06-02 19:15
是wds.st_river_r.stcdt
#9
xu20002006-06-02 19:17
在oralce中不像delphi这样一定要区分开类型,而且oralce中有这个strtoint函数吗?
R_IQuery.SQL.Add(' where wds.st_river_r.stcdt='+strtoint(QHStanmCmb.text)+' and YMDHM>=to_date("2000-12-12 08:00:00","yyyy-mm-dd hh24:mi:ss")'+
'and ymdhm<=to_date("2004-12-10 08:00:00","yyyy-mm-dd hh24:mi:ss") order by YMDHM ');
再试一下,如果不行,你还不如直接用sql plus测试。
#10
leo_kp2006-06-02 20:33

这还是不行啊
我上面说了:wds.st_river_r.stcdt是数字类型撒
要是像你那样做饿话就会类型不匹配
我对delphi和oralce都不是很熟悉,希望你们教教我啊

#11
xu20002006-06-02 20:47
这么办吧你打开sql plus
输入下面几条句
select STCDT,YMDHM,ZR,Q from WDS.ST_RIVER_R
where wds.st_river_r.stcdt=1 and YMDHM>=to_date("2000-12-12 08:00:00","yyyy-mm-dd hh24:mi:ss") and ymdhm<=to_date("2004-12-10 08:00:00","yyyy-mm-dd hh24:mi:ss") order by YMDHM
看看报错吗?
#12
leo_kp2006-06-02 22:49

我试了的
这样写的话不会抱错
但是写到delphi里就有错
而且只加以下一条控制语句也会出错,什么无效的格式

YMDHM>=to_date("2000-12-12 08:00:00","yyyy-mm-dd hh24:mi:ss")

#13
leo_kp2006-06-02 22:51
如果按你上面说的做的话得把那个1变成to_number(1)
#14
xu20002006-06-03 15:50
那么一定是你在组合sql语句的时候出了问题,你在open之前,先看看你的sql组合成了什么样?是否符合oracle的标准?是否是你要的那种效果?
在oracle中的number类型的使用上,我可以明确的告诉你,我几乎每天都在用oracle8i但无论是sql plus还是pl/sql developer的select语句我就从未做过类型转换。
#15
leo_kp2006-06-03 16:40

我知道是sql语句出错了
你怎么上面那个语句应该怎么改吗
YMDHM>=to_date("2000-12-12 08:00:00","yyyy-mm-dd hh24:mi:ss")
报错说yyyy-mm-dd hh24:mi:ss它是无效的表达式

#16
xu20002006-06-03 17:05
这函数怎么用,我也没记住,否则早就看出问题了。你可以到oracle中问一下。
1