Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2978 / 13646 ツリー ←次へ | 前へ→

【64925】MsSQL ODBC接続を利用した複数レコードの取得 初心者 10/3/26(金) 23:08 質問[未読]
【64927】Re:MsSQL ODBC接続を利用した複数レコード... neptune 10/3/26(金) 23:22 発言[未読]
【64929】Re:MsSQL ODBC接続を利用した複数レコード... 初心者 10/3/26(金) 23:59 発言[未読]
【64937】Re:MsSQL ODBC接続を利用した複数レコード... neptune 10/3/27(土) 22:29 発言[未読]
【64956】Re:MsSQL ODBC接続を利用した複数レコード... 初心者 10/3/29(月) 21:53 お礼[未読]
【64964】Re:MsSQL ODBC接続を利用した複数レコード... neptune 10/3/30(火) 16:46 発言[未読]
【64968】Re:MsSQL ODBC接続を利用した複数レコード... 初心者 10/3/30(火) 22:52 発言[未読]

【64925】MsSQL ODBC接続を利用した複数レコードの...
質問  初心者  - 10/3/26(金) 23:08 -

引用なし
パスワード
   はじめまして、よろしくお願いします。
題名の点で困っています。
状況を書かせていただきますと、

MySQLを利用したDBでテーブル名は'test'、項目は'num1'のみでレコードが5つあります。
この状況で下記VBAを実行した場合、1つのレコードしか取得することができません。
複数のレコードを取得したい場合にはどのようにしたらいいでしょうか?
カーソルを次レコードにしようとNextと記載してもエラーが返ってきます。
ただ、COUNT(*)を同処理で取得しているため、接続方法などは変更しない手段をご教授いただけると幸いです。
---------------------------------------------------------------------
Dim cn As Variant
Dim rn As Variant

Srt cn=CreateObject("ADODB.Connection")
cn.Open "dsn=MySQL;uid=root;pwd=***"
cn.CursorLocation = 3

rs=cn.Execute("SELECT * FROM test")
Cells(1.1)=rs("num1")

cn.Close

【64927】Re:MsSQL ODBC接続を利用した複数レコー...
発言  neptune  - 10/3/26(金) 23:22 -

引用なし
パスワード
   ▼初心者 さん:
>複数のレコードを取得したい場合にはどのようにしたらいいでしょうか?
基本的にこのまんまで取れているはずです。

>カーソルを次レコードにしようとNextと記載してもエラーが返ってきます。
書かれてないですが。どこにどのように。
といっても、recordsetオブジェクトにはnextってメソッドはないですが。

一度recordsetを最後まで送り、recordcountプロパティを取得してみたら
いくつレコードが取得できているかわかりますよ。

※データ型が判っているならそのデータ型で変数を宣言しましょう。
※規定のプロパティも書きましょう。

【64929】Re:MsSQL ODBC接続を利用した複数レコー...
発言  初心者  - 10/3/26(金) 23:59 -

引用なし
パスワード
   早速の回答ありがとうございます。

>>カーソルを次レコードにしようとNextと記載してもエラーが返ってきます。
>書かれてないですが。どこにどのように。
>といっても、recordsetオブジェクトにはnextってメソッドはないですが。
申し訳ありません。いろいろ思考錯誤したのですが結局実現できなかったため、どのように記載していたか覚えがなく曖昧な記載となってしまいました。
調べた覚えのあるサイトを見直していたところ、EOFになるまでのループでMoveNextを使用した際にエラーとなっていたと思います。

>一度recordsetを最後まで送り、recordcountプロパティを取得してみたら
>いくつレコードが取得できているかわかりますよ。
>
>※データ型が判っているならそのデータ型で変数を宣言しましょう。
>※規定のプロパティも書きましょう。
なんとなく、わかった気がします。
つまり、Variant型で宣言していたためにMoveNextでエラーがでたということでしょうか。
動作確認の行える環境がネット環境のない職場しかないため、下記内容のVBAを後ほど確認してみようと思います。

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer

'ODBC接続
Set rs = New ADODB.Recordset
Set cn=CreateObject("ADODB.Connection")
cn.Open "dsn=MySQL;uid=root;pwd=***"
cn.CursorLocation = 3

'レコード取得
rs=cn.Execute("SELECT * FROM test")

'レコード分ループ
Do Until rs.EOF
 Cells(i.1)=rs("num1")
 rs.MoveNext
 i=i+1
Loop

'取得レコード数確認
Msgbox rs.RecordCount

'接続を閉じる
cn.Close

【64937】Re:MsSQL ODBC接続を利用した複数レコー...
発言  neptune  - 10/3/27(土) 22:29 -

引用なし
パスワード
   ▼初心者 さん:
えーと、追記
レコードセットが空でないことを保障するには

>'レコード取得
>rs=cn.Execute("SELECT * FROM test")

if rs.bof=false and rs.eof = false then
'RecordCountは.CursorLocation = 3ならここで取れるかもしれない。
'取得レコード数確認
Msgbox rs.RecordCount

>'レコード分ループ
>Do Until rs.EOF
> Cells(i.1)=rs("num1")
> rs.MoveNext
> i=i+1
>Loop
>
>'取得レコード数確認
>Msgbox rs.RecordCount
>
>'接続を閉じる
>cn.Close
end if

【64956】Re:MsSQL ODBC接続を利用した複数レコー...
お礼  初心者  - 10/3/29(月) 21:53 -

引用なし
パスワード
   前回記載した内容で無事複数レコードの取得、表示ができました。
最初、'Dim cn As ADODB.Connection'をコンパイルした際にエラーとなってしまい、このエラーがでたためにVariant型にしていたのを思い出しました。
よーく調べてみると参照設定が足りなかったようでして・・・
いい勉強になりました。 ponponさん、アドバイスありがとうございました。

【64964】Re:MsSQL ODBC接続を利用した複数レコー...
発言  neptune  - 10/3/30(火) 16:46 -

引用なし
パスワード
   ▼初心者 さん:
ponponさん?

まぁいいけど。このスレッドでは発言ないよね。

【64968】Re:MsSQL ODBC接続を利用した複数レコー...
発言  初心者  - 10/3/30(火) 22:52 -

引用なし
パスワード
   大変失礼しました。
一覧表示から名前をコピペした際に一番上の記事をみてしまっていたようです。
以後、気をつけさせていただきます。

2978 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free