現在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
見たところ記載している部分に気になるとこは無いような
〜の部分のConect.ConnectionStringや
SQL文はVBがエラーチェックをしてくれませんが
スペル間違いなどは無かったですか(^^ゞ
On Error Resume Nextが(ほかの関数やSubも含め)あったら、
それをはずしてみるとか。(またはOn Local Error Resume Nextに変更)
それでもだめなら全行取得するようなSQL文にしてみる
("select * from 〜"というようなやつ)
とか
僕もSQLサーバーのデータを取得する時によくRecordCountが-1になってます。
(ただしEOFはちゃんと動いていますが)
原因が良く分からないのでRecordCountプロパティは一切使わず、
件数は件数だけで別に取得するようにしてます。
select count(*) as [total]
from 〜
とかで。
OLEDBのプロバイダやCursorLocationの種類によって
RecordCountが取得できない場合があるそうです。
その場合は-1が入る(これはヘルプにものってる)そうです。
CursorLocationをadUseClientなどにセットしてもだめですか?
あ、読み落としていました<eofはfalse
MS SQL Serverであれば、RecordCountは-1で正解です。
それ以外だと、サーバーの種類によってRecordset.MoveLastをすることで
取得できたりするものもあるようです。
私もtakkさんと同じでSQL serverのときは
Eofがfalseの間取得するようにしてます。