- ベストアンサー
ADOのRecordCountプロパティについて
ADOを介してOracleにアクセスしています。 以前にAccessで行っていた時は、 Set rst.Open "Table_Main", cnn, adOpenStatic With rst lCount = .RecordCount End With とすればレコード数が返ってきたのですが、 Oracleの場合は-1のままなのです。 レコードセットの開き方に問題があるのでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
> COUNT(*)を使う場合は > Dim lCount as Long > strSQL = "select count (*) from Table_Main" > lCount = cnn.Execute (strSQL) > でいいのでしょうか。 実際に試して見ましたか? やってみれば、上記では正しくないことはすぐにわかるはずです。 Connection.ExecuteメソッドはRecordsetオブジェクトを返します。 (オブジェクトブラウザやヘルプで確認できます) 正しくは、(一例ですが)下記のようになります。 Dim adoCnn As ADODB.Connection Dim adoRst As ADODB.Recordset Dim lCount As Long Dim strSQL As String strSQL = "SELECT COUNT (*) FROM Table_Main" Set adoCnn = New ADODB.Connection Set adoRst = New ADODB.Recordset adoCnn.Open adoRst.Open strSql, adoCnn lCount = adoRst.Fields(0).Value ※ 省略可能な引数は省略して書いています。実際に使用する場合は適宜変更してください。 なお、通常は、adoRst.Fields(0).Value のように列番号による参照ではなく、adoRst.Fields("Name").Value のように列名による参照が一般的です。 この場合は、SQLの結果セットが1列しかないことと、COUNT (*) にエイリアス を付けていないため、このような記述にしています。 strSQL = "SELECT COUNT (*) As RecCount FROM Table_Main" : (略) : lCount = adoRst.Fields("RecCount").Value のように、列名を付与して記述することもできます。 (コードの可読性の観点ではこの方が無難です。ただし、エイリアスと予約語がぶつからないように注意!) 失礼ですが、SQLやDBの基本的な操作を書籍等で研究された方がよいと思います。
その他の回答 (1)
SELECT COUNT(*) ...... でレコード件数を取得できますが、これではダメですか?
補足
COUNT(*)を使う場合は Dim lCount as Long strSQL = "select count (*) from Table_Main" lCount = cnn.Execute (strSQL) でいいのでしょうか。
お礼
どうもありがとうございました。参考になりました。