
ExcelのVBAとMySQLを使っていろいろ実験してます。
ひとりでは、どうしても解決に時間がかかったり、分からないことがあるので、分かる方に教えていただけたらと思います。
Excelにデータベースのデータを読み込んだり、Excelで入力したり、計算したしたものを、またデータベースに入力したりしています。どうしても解決したいことが、以下の(1)(2)です。
(1)プログラムの一部ですが、
Set Rs = New ADODB.Recordset
sql="select count(*) from yotei"
Rs.Open sql, Cn 'Cnはデータベースへの接続 ADODB.Connection
Rs.MoveFirst
Range("A1").CopyFromRecordset Rs 'いったんワークシートに結果を転送
count = Range("A1").Value 'ワークシートから値を取得
結果のレコードセットから希望の1行1列を取り出す方法でつまづきました。Rs.GetRowsなど使い方が分かりませんでした。
例えばテーブルのレコード数などを調べたときの結果は1行1列しかないんですけど、上を見ての通り、不効率なことをしてしのいでます。
(2)LANでつないだ他のパソコンから、このパソコンのデータベースに接続したいです。何が(どうすることが)必要ですか?
接続文字列
DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=test; UID=root; OPTION=3
のSERVER=のところを変えるだけで済むのでしょうか?これだけではだめですよね?パソコンやLANでどんな設定をしなくてはならないでしょう?
説明が悪かったらごめんなさい。やりたいのにできなくて、かなり悩んでます。
No.1ベストアンサー
- 回答日時:
一般的には、
ある問い合わせをレコードセットでした時、
その件数は、
Rs.RecordCount
で調べることができます。
(1)の場合、count(*)で数えているので
結果はレコードが1つしかなくフィールドが1つしかないので
Rs.Fields.Item(0)
又は
Rs(0)
で結果を得ることができます。
GetRowsは複数のレコードを配列で得る方法です。
この場合は、必要ありません。
とりあえず(1)だけ・
感激です。今やってみて、できました。
ありがとうございます。
このことに関連することも、しっかり理解したいですが、分かりやすい本などありますか?私は見つけられなかったのです。

No.3
- 回答日時:
失礼します。
「MySQL」は解りませんが。(1)
>Range("A1").CopyFromRecordset Rs 'いったんワークシートに結果を転送
が解っているなら、
>sql="select count(*) from yotei"
これを
sql="select * from yotei"
とかで試して下さい。
>Rs.GetRows
これはExcelの感覚からは行列が逆なので
かえって扱いにくいです。
むしろ、行ごとにチマチマ転記する
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
このような方法を覚えた方が応用が利きます。
(このサンプルはMDBです。)
(2)
まずはコンパネ(管理ツール)の「ODBCデータソース」で
接続を確認(テストができないならMSクエリ等でテスト)
した上(認証の登録もすませる)で、
DSN=HOGEHOGE;
だけでも良いのではないでしょうか。
データベースの接続文字列でDNS=~を特別設定しなくても使えているようです。でもこれも興味があるので、また調べようと思います♪
データベースの操作 楽しいです。賢いなぁと思います(あたりまえ?笑)
Excelでないと使えない方法より、いろんなところで応用できそうな方法に興味があったので、上手なSQL文と、上手な取り出し方を求めていました。
いろいろ解説ありがとうございます。
No.2
- 回答日時:
こんにちは。
(1)に関しては回答が出ているので・・・。
SERVERを変えればいいですよ。
それでダメな場合は、ほかの設定を教えてもらわないとわかりません・・・。
とりあえず(2)だけ。
(^^ゞ
ありがとうございます。
へぇ それだけなんですね。それは少し安心です。
(まだ複数台で実験できてないです)
しかし、SERVERを何に変えるのかが分からないです。IPアドレスでしょうか?それとも”コンピュータ名”でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MDBをADO接続でINSERT・UPDATE...
-
UPDATE時にSETしたい日本語文字...
-
OracleDataReaderについて…
-
VBA 変数名に変数を使用したい。
-
Redim とEraseの違いは?
-
VB.NETにて、構造体へデータを...
-
『列名 '担当者CD' があいま...
-
VB6.0の「vbFromUnicode」はVB....
-
VB.NETでのAccessテーブルリンク
-
[C#] DataGridViewでコンボボッ...
-
INT64対応のprintf系関数はあり...
-
EXCELのVBAでLenB関数について
-
2つ目のレコードの値を取得す...
-
VBAでアクセスDBからデータの取...
-
2次元配列でウォッチが出来ない
-
ワークテーブルの作成について
-
ADOでNullフィールドの抽出
-
手動または分散トランザクショ...
-
Access VBA 添付型フィールド
-
CString型 全角半角を意識せず...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB】コンボボックスにデータ...
-
VB6.0でSQLServerへ・・・Recor...
-
OracleDataReaderについて…
-
名前'dbOpenDynaset'は宣言され...
-
UPDATE時にSETしたい日本語文字...
-
VB2005でACCESSの処理
-
初心者ですデータベースの形式 ...
-
データベースの接続ができない
-
複数SQL発行について
-
ExcelVBAでのAccessデータベー...
-
ListviewにDB内容を表示し方に...
-
vb.netでデータベース(Access)...
-
MDBをADO接続でINSERT・UPDATE...
-
VBでAccessにSQL文を実行して値...
-
VB6.0でアクセス2000...
-
MSFlexGridでデータの追加の方...
-
VB2005でmdbに接続するには?
-
VB6でデータベースを変えるとテ...
-
ASP.NET(VB.NET)でADO.NETを使...
-
VB6.0とaccessのDBを接続する
おすすめ情報