Delphi使用ADO进行数据库编程时,执行SQL会报错,下面是详细的说明
**方式1会报错**:ORA-00937: not a single-group group function
adoquery.Close;
adoquery.SQL.Text := 'select count(*) icount from testtable where testno = :no and testname = :name ';
adoquery.Parameters.ParamByName('no').Value := Number;
adoquery.Parameters.ParamByName('name').Value := Name;
adoquery.Open;
adoquery.First;
Result := adoquery.FieldByName('icount').AsInteger ;
**方式2可以执行**
adoquery.Close;
adoquery.SQL.Text := Format('select count(*) icount from testtable where testno = ''%s'' and testname = ''%s'' ', [Number, Name]);
adoquery.Open;
adoquery.First;
Result := adoquery.FieldByName('icount').AsInteger ;
**方式3可以执行**
adoquery.Close;
adoquery.SQL.Text := 'select * from ( select count(*) from testtable where testno = :no and testname = :name )';
adoquery.Parameters.ParamByName('no').Value := Number;
adoquery.Parameters.ParamByName('name').Value := Name;
adoquery.Open;
adoquery.First;
Result := adoquery.Fields[0].AsVariant
第一种报错的SQL方式是在MSDAORA.1驱动下报错,但是使用OraOLEDB.Oracle.1驱动可以
sqlserver链接oracle可以通过两个访问接口:“MSDAORA”和“OraOLEDB.Oracle”
1、“MSDAORA”访问接口是由MicrosoftOLEDBProviderforOracle提供的。通过该访问接口建立的链接服务器在进行查询oracle表(带数据类型CLOB、BLOB字段)时会报错。
2、“OraOLEDB.Oracle”访问接口是由oracle的OracleProbiderforOLEDB驱动提供的。它解决了两个数据库类型不一致的的问题。而且如果需要使用分布式事务,必须使用它来创建链接服务器。
二者在使用上,有些语法不一样。建议使用oracle厂商的原版驱动吧。
你的sql没有什么问题,应该是驱动的问题。
http://blog.csdn.net/eagletian/article/details/18621
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。