• ベストアンサー

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にて流して件数なしの確認済みです) これってなんでなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.2

件数が1件で返ってきているのは、SUM関数の結果が返ってきているからです。 条件に合うものが件数なしだとしても、それをSUMした結果は「Null」という結果が1件出来るためです。 DynasetとSQL PLUSでは扱いがちょっと違うはずなので。

macky55
質問者

お礼

やはり、DynasetとSQL PLUSでは結果が異なるんですね~。 ありがとうございました。

その他の回答 (1)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

CreateDynasetのオプションは? 基本的にRecordCountプロパティは使用しないほうがいいですよ。 最終レコードまでフェッチして初めて件数が確定します。 そのため、RecordCountを参照すると内部的に最終行までフェッチが行われ、元の位置に戻す処理が行われるため非常に非効率です。 また、速度向上のためにORADYN_NOCACHEが指定されている場合は、カーソルが後方に戻せないためRecordCountでの件数の取得は正しく行えません。

macky55
質問者

お礼

>RecordCountを参照すると内部的に最終行までフェッチが行われ、元の位置に戻す処理が行われるため非常に非効率です。 へ~!そうなんんですね。勉強になります。 存在チェックには、EOFを使用するべきなんですね。 回答ありがとう御座いました。 また、よろしくお願いします。

macky55
質問者

補足

CreateDynasetのオプションはORADYN_READONLY(&H4)です。

関連するQ&A