dポイントプレゼントキャンペーン実施中!

ADOを介してOracleにアクセスしています。
以前にAccessで行っていた時は、
Set rst.Open "Table_Main", cnn, adOpenStatic
With rst
lCount = .RecordCount
End With
とすればレコード数が返ってきたのですが、
Oracleの場合は-1のままなのです。
レコードセットの開き方に問題があるのでしょうか。

A 回答 (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の基本的な操作を書籍等で研究された方がよいと思います。
    • good
    • 0
この回答へのお礼

どうもありがとうございました。参考になりました。

お礼日時:2003/02/10 13:07

SELECT COUNT(*) ...... でレコード件数を取得できますが、これではダメですか?

この回答への補足

COUNT(*)を使う場合は
Dim lCount as Long
strSQL = "select count (*) from Table_Main"
lCount = cnn.Execute (strSQL)
でいいのでしょうか。

補足日時:2003/02/08 14:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!