起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 216|回复: 8

【结】[请求]关于在标准数据集中使用Oracle的row_number的问题

[复制链接]
发表于 2010-4-30 10:43:35 | 显示全部楼层 |阅读模式
我想根据一定的条件过滤出数据集后,根据名称排序并自动生成序号,以下语句在sqlplus中能成功执行:

SELECT T.*,row_number() over( order by T.MC ) as XH
  FROM T
  where TGUID = '268412F78D964571BC06ABB9B075897C'
order by T.MC

在X3信息层的标准数据集中报错,SQL语法分析错误,忽略也没用

这个怎么解决?
回复

使用道具 举报

发表于 2010-4-30 11:02:39 | 显示全部楼层
如果SQL语句在数据库上执行是ok的,就可以,运行功能的时候打开数据集的时候不会保存的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-30 11:52:13 | 显示全部楼层
纯粹的打开没有问题,关键是我在增加条件的时候不支持
if AGYSGUID = '' then
        lFilter := ' GYSGUID = ''#'' and RWDXFCSGUID = '''+ARWDXFCSGUID+''' ' // 打开一个空集合
     else
     begin
         lFilter := ' GYSGUID = '''+AGYSGUID+''' and RWDXFCSGUID = '''+ARWDXFCSGUID+''' ';
     end;

     TBizDataSet(dsbZBTZS.DataSet).SQLFilter := lFilter;
     TBizDataSet(dsbZBTZS.DataSet).SQLFiltered := true;
     dsbZBTZS.DataSet.Order := 'WTSXH';
     if not dsbZBTZS.DataSet.Active then
        dsbZBTZS.DataSet.Open;  // 这里报错

10.jpg

30.25 KB, 下载次数: 136

回复 支持 反对

使用道具 举报

发表于 2010-4-30 13:09:06 | 显示全部楼层
哦,你不要用SQLFilter,因为平台解析不了(SQLFilter是平台的),所以你直接拼到SQL语句的Where部分就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-30 14:04:13 | 显示全部楼层
不用SQLFilter我应该在哪里写整个SQL语句?

不能在信息层上的数据集内直接写,因为条件我是在运行期间才能获取。
回复 支持 反对

使用道具 举报

发表于 2010-4-30 15:28:06 | 显示全部楼层
在你给SQLFilter赋值的地方,直接把原先的SQL.texe 加上这个条件就可以哦
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-30 16:36:14 | 显示全部楼层
SQL.texe? 我没找到这个属性
你能不能写点伪代码
回复 支持 反对

使用道具 举报

发表于 2010-4-30 16:42:54 | 显示全部楼层
sql.text
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-30 16:49:41 | 显示全部楼层
哦,找到了

TSQLDataSet(dsbZBTZS.DataSet).SQL.Text := lText;            

可以结了,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 03:44 , Processed in 0.044771 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表