EDBEngineError msg with 'Capability not supported'(50分)

  • 主题发起人 主题发起人 戴炜
  • 开始时间 开始时间

戴炜

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一句程序 MainDataModel.FilesQuery.Sql.Add('select

FileCmpy from files.db group by FileCmpy having

StrToInt(:Today) > StrToInt(FilePayEnd) and FileTag = ''1''' );

结果提示 EDBEngineError msg with 'Capability not supported'

 
1、没有 StrToInt 这个函数
2、你group by filecmpy,没有其他的集合类函数,恐怕不行
比如你 group by a 起码你要 select a,sum(b) (或者select a,max(b), select a,avg(b)这样的)
 
1、有函数 StrToInt(StrToInt)
2、Group by 必须和 SQL 的集合函数一起使用有如下函数:
Sum()、Avg()、Mn()、Man()、Count()……等等
(另外,集合函数支持复杂的表达式如 Sum( Field01 +Field02 )
3、对于复杂的 SQL 语句,特别是涉及到动态查询和复杂查询时,
建议先用 QBE 进行调试。
 
我想你可能使用的是Local SQL,它遇到不支持的特性时就会出现如此错误!
个人认为:
你的数据库设计不合理,FilePayEnd是否该为Number型字段.Today既然为
参数,没有必要用StrToInt,直接使用
MainDataModel.FilesQuery.ParamByName('Today').AsInteger:=iToday;

 
1、有函数 StrToInt(StrToInt)

2、Group by 不一定必须和 SQL 的集合函数一起使用有如下函数:Sum()、Avg()、

Mn()、Man()、Count()……等等,下面语句正确:delphi 4 sp3通过

select cmpy,payend from file group by cmpy,payend

3。我使用Paradox数据库,

4.我发现我错在Having子句上:

Having是对已经分组完的记录筛选;Where是对记录有条件的筛选;

而我的程序的目的为:对记录有条件的筛选后,再分组统计。

所以,上面程序应该为:

select cmpy,payend from file where filetag ='1' and

StrToInt(:Today) > StrToInt(payend) group by cmpy,payend

必须group by cmpy,payend ,因为必须与select后的字段一致,

不然,提示:"when GROUP BY exists,every simple field in

projectors must be in GROUP BY..."

5.以上测试通过。

自己的问题,自己思考,自己测试,自己解决

应该培养自己的解决问题的能力,
 
有StrToInt,但是Sql中没有这个函数。



 
如果数据是数字,SQL 语法中有 TO_Number('') 函数.
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
975
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
3K
import
I
I
回复
0
查看
3K
import
I
后退
顶部