Delphi使用ADO進行資料庫編程時,執行SQL會報錯,下面是詳細的說明
有三種方式拼接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驅動可以
到底是為什么
uj5u.com熱心網友回復:
sqlserver 鏈接oracle可以通過兩個訪問介面:“MSDAORA” 和“OraOLEDB.Oracle”1、“MSDAORA”訪問介面是由Microsoft OLE DB Provider for Oracle提供的。通過該訪問介面建立的鏈接服務器在進行查詢oracle表(帶資料型別CLOB、BLOB欄位)時會報錯。
2、“OraOLEDB.Oracle” 訪問介面是由oracle 的Oracle Probider for OLE DB 驅動提供的。它解決了兩個資料庫型別不一致的的問題。而且如果需要使用分布式事務,必須使用它來創建鏈接服務器。
二者在使用上,有些語法不一樣。建議使用oracle廠商的原版驅動吧。
uj5u.com熱心網友回復:
只能說明一點,注意SQL和Oracle不同資料庫的不同SQL陳述句語法。uj5u.com熱心網友回復:
樓上應該是正解,轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/81171.html
標籤:數據庫相關
上一篇:Delphi7 在電腦系統語言格式為英文(美國)時,從ACCESS資料庫中文為“????”亂碼,急~~謝謝
下一篇:動態陣列問題
