"select * from demo_table where length(id) = 2"不能执行!谢谢(50分)

  • 主题发起人 主题发起人 dudajiang
  • 开始时间 开始时间
D

dudajiang

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI5.0中,我用sql link连接oracle数据库,在TQuery中设定其
Query1.SQL.Add('select * from DEMO_TABLE where length(id) = 2');
不能执行, length不是标准SQL语法,但是我在oracle中用到了很多。
有什么办法能让BDE执行我的sql语句
 
我试过你的语句,是可以的,你的ID是什么类型?
 
是vrachar2,报的错误是“raised exception class EDBEngineError with message
'invalid use of keyword Token length(id)'"
我看过delphi的文档,说delphi可以处理非标准的sql语句,是不是要在哪里设置?
 
你用的是何种数据库?支不支持length函数?
 
试试用ODBC连接。
 
我用的是oracle,这条语句我在sql explorer中是可以执行的。但在程序中不行。
我不想用odbc。
 
试着升级你的 BDE 了,我这边试过是没有问题的
 
应该可以的,看看别的原因
 
为什么在delphi 带的sql explorer 中可以执行,在程序中就不行。我想 sql explorer
也是以bde为基础的,不应该是bde 的问题吧?而且我用的是 delphi 5.0。
by the way :我用oracle for odbc也试了,不行!
 
我查过delphi的帮助,是说可以执行非sql-92的sql 语句,是不是在程序中要设置与sql
相关的什么属性呀?
 
我在SQL Explorer 中执行DELPHI带的PARADOX数据库,执行上面的SQL语句,结果出现了
上面的错误,而在我建立的ORACLE数据库(以SQL LINK和ODBC两中方式)中执行时,则
一点问题也没有,但是在程序中执行时,总报错,这说明在我的程序中,BDE把我的SQL
语句当成了SQL-92的标准来解释,这样我无法在WHERE 后面添加ORACLE的内涵函数。
谁解决了问题,在加100分!
 
你的ID是不是Int类型的,如果是干不用 ID>99 呢????
 
谢谢大家:
我知道了一部分,我在使用上面的sql语句的时候,如果将TQUERY的requestlive
设成false的话就可以执行,但是若设成true的话,就不能执行上面的sql语句了,不过
我真的是想对上面语句的查询结果进行操作,请大家再help!

 
数据库里有LENGTH这个函数吗???
 
试着把id用方括号括起来看看,id这个名字太敏感了。
这样试试:
Query1.SQL.Add('select * from DEMO_TABLE where length([id]) = 2');
 
我在程序里面不是用的ID,这里的id只是我的随手写的例子而已
to zhao0707:oracle 支持length
 
那。。。会不会是length和delphi的length函数冲突了?不如把length用方括号括起来
试试。。。我瞎猜的,出问题别找我啊。。。
 
Query1.SQL.Add('select * from DEMO_TABLE where len(id) = 2');

length()是DELPHI的函数,而LEN()才是SQL的标准函数。
 
to Junior&荷塘新月:
还是不行,不过错误不太一样改成“Capability not supported"
而且我的意思是:我在oracle的sql语句中用到了很多oracle的内置函数:如length,
count等等,显然这些都不是 标准sql,但是我必须要用。而且我将Tquery 的
requestlive = false就可以执行,只是我必须将查询出来的结果集绑在一个dbgrid中
进行增,删,改的操作,将requestlive = false我就无法达到增,删,改的目的了

注意:我这里的length是oracle函数!
 
Query1.SQL.Add('select * from DEMO_TABLE where [length](id) = 2');
这样写不知道行不行。
 
后退
顶部