ADOについて


ゴリケル  2003-04-03 02:41:32  No: 106507

現在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-03 06:15:12  No: 106508

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


Loreley  2003-04-03 13:37:25  No: 106509

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

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


takk  2003-04-03 19:37:11  No: 106510

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

select count(*) as [total]
from 〜

とかで。


K  2003-04-03 23:13:35  No: 106511

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

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


Loreley  2003-04-04 05:30:41  No: 106512

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加