- ベストアンサー
oo4o CreateDynasetによるデータ取得
こんばんわ。知っている方がいたら教えて下さい。 今、VB6.0&ORACLE9iで開発を行っています。 oo4o接続で、CreateDynasetを使用し、下記のようなSQL文を投げています。ただし、取得するレコードは0件になります。 SELECT SUM(項目a) FROM テーブルA WHERE 条件1 GROUP BY を使用せず、SUMを使用すると、oraDynaset.EOFがFALSEとなり、OraDynaset.RecordCountは1件となります。 (当然、SQLはSQL PLUSにて流して件数なしの確認済みです) これってなんでなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
件数が1件で返ってきているのは、SUM関数の結果が返ってきているからです。 条件に合うものが件数なしだとしても、それをSUMした結果は「Null」という結果が1件出来るためです。 DynasetとSQL PLUSでは扱いがちょっと違うはずなので。
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
CreateDynasetのオプションは? 基本的にRecordCountプロパティは使用しないほうがいいですよ。 最終レコードまでフェッチして初めて件数が確定します。 そのため、RecordCountを参照すると内部的に最終行までフェッチが行われ、元の位置に戻す処理が行われるため非常に非効率です。 また、速度向上のためにORADYN_NOCACHEが指定されている場合は、カーソルが後方に戻せないためRecordCountでの件数の取得は正しく行えません。
お礼
>RecordCountを参照すると内部的に最終行までフェッチが行われ、元の位置に戻す処理が行われるため非常に非効率です。 へ~!そうなんんですね。勉強になります。 存在チェックには、EOFを使用するべきなんですね。 回答ありがとう御座いました。 また、よろしくお願いします。
補足
CreateDynasetのオプションはORADYN_READONLY(&H4)です。
お礼
やはり、DynasetとSQL PLUSでは結果が異なるんですね~。 ありがとうございました。