ADOについて


ゴリケル  2003-04-02 17:41:32  No: 106507  IP: [192.*.*.*]

現在vb6とADOを使って開発しているのですが、ちょっとわからないので
教えてください。

どうしてもRecordCountが-1になっており、レコードの.eofも常にfalse状態
になっています。ADOの接続定義かレコードセットの定義の書き方が間違って
いるのでしょうか?教えてください。

今は下記のように書いています。

dim OraCnn    As New ADODB.Connection
dim OraRec    As New ADODB.Recordset

※ 〜は省略部分です。

    OraCnn.Open 〜

  wSQL = ""
  wSQL = wSQL & "〜"

    OraRec.Open wSQL, OraCnn, adOpenStatic, adLockReadOnly

編集 削除
ニック  2003-04-02 21:15:12  No: 106508  IP: [192.*.*.*]

見たところ記載している部分に気になるとこは無いような
〜の部分のConect.ConnectionStringや
SQL文はVBがエラーチェックをしてくれませんが
スペル間違いなどは無かったですか(^^ゞ

編集 削除
Loreley  2003-04-03 04:37:25  No: 106509  IP: [192.*.*.*]

On Error Resume Nextが(ほかの関数やSubも含め)あったら、
それをはずしてみるとか。(またはOn Local Error Resume Nextに変更)

それでもだめなら全行取得するようなSQL文にしてみる
("select * from 〜"というようなやつ)
とか

編集 削除
takk  2003-04-03 10:37:11  No: 106510  IP: [192.*.*.*]

僕もSQLサーバーのデータを取得する時によくRecordCountが-1になってます。
(ただしEOFはちゃんと動いていますが)
原因が良く分からないのでRecordCountプロパティは一切使わず、
件数は件数だけで別に取得するようにしてます。

select count(*) as [total]
from 〜

とかで。

編集 削除
K  2003-04-03 14:13:35  No: 106511  IP: [192.*.*.*]

OLEDBのプロバイダやCursorLocationの種類によって
RecordCountが取得できない場合があるそうです。
その場合は-1が入る(これはヘルプにものってる)そうです。

CursorLocationをadUseClientなどにセットしてもだめですか?

編集 削除
Loreley  2003-04-03 20:30:41  No: 106512  IP: [192.*.*.*]

あ、読み落としていました<eofはfalse

MS SQL Serverであれば、RecordCountは-1で正解です。
それ以外だと、サーバーの種類によってRecordset.MoveLastをすることで
取得できたりするものもあるようです。

私もtakkさんと同じでSQL serverのときは
Eofがfalseの間取得するようにしてます。

編集 削除