在三层结构中用子查询的问题,100分 (100分)

  • 主题发起人 主题发起人 chjer
  • 开始时间 开始时间
C

chjer

Unregistered / Unconfirmed
GUEST, unregistred user!
今天在写一个报表程序时,发现在三层结构中只要用子查询就出错,请各位大吓出招,
服务端用ADO:
adsGeneral.CommandText:='select t_item,t_dsca,t_kost,t_koor,t_recd,(t_quan) from '
+'(select a.t_item,a.t_cwar,a.t_kost,'
+'a.t_koor,a.t_quan,b.t_recd,c.t_dsca from ttdinv700200 as a,'
+'ttdinv100200 as b,ttiitm001100 as c where a.t_orno*=b.t_wrho and '
+'a.t_item=c.t_item and '
+'a.t_cwar='+''''+ck+''''+' and c.t_citg='+''''+wlz+''''+' and a.t_trdt>='
+''''+startdate+''''+' and a.t_trdt<='+''''+enddate+''''+') as aa';
打开时出错提示:数据提供者或其他服务返回E_FAIL状态
将CommandText改成不含子查询的语句一切正常
我用Profiler监测数据库服务该语句已执行成功
 
在BDE中如果数据集要进行修改的话,是不能使用子查询的,ADO控件是不是也有这种问题?
 
To chjer:
本来这个不是一个问题,你这段代码直接在数据库中执行是绝对没有问题的,就象你自己
所发现的那样。因为就在于你进行数据通信用的是ADO,而且你后台数据库管理系统用的是ORACLE,
没错吧?你如果用BDE通信是没有这个问题的。原因是目前ORACLE对Microsoft公司的ADO规范还不是
很支持,所以用ADO去访问或者操作ORACLE数据库会出现意想不到的问题,包括你现在出现的问题。
相信ORACLE公司将来肯定会解决这个问题(你或者可以用ORCLE的最高版本试试还有没有问题),但在
ORACLE9或者更高版本的ORACLE数据库管理系统出来之前,我建议你使用BDE去跟ORCLE数据库通信,或者
改用其他的数据库管理系统。
 
To chjer:
补充一下,在"http://www.delphibbs.com/delphibbs/dispq.asp?lid=1045837"里,"sunqi"
也同样碰到类似的问题,你可以去看看。
 
ADO与ORACLE矛盾?
gz
提前[:)]
 
原因已有人指出了,解决的方法是用inner join, left outer join,right outer join的sql
写法,而且一个表时一定要自己inner join自己,
 
不一定,用含用子查询的sql语句动态付给clientdataset时,不用执行都会出错!应该是delphi的bug,
如果直接放在query的sql又不会出现问题!
 
我的数据库是SQLServer7。
我在数据库中将子查询做了一个视图,然后在中间层中对此视图操作,一切OK了。
不过我还想试试上面的办法,看看到底什么原因
 
后退
顶部