GEN MUTO'S HOMEPAGE  エクセル大事典  エクセルVBAを極める

エクセルExcel大事典 エクセル大事典TOPページへ
 ■ エクセルVBAを極める−VBAスーパーテクニック
  Microsoft SQL Serverに接続してみよう!
 
■ SQL-Serverへ接続してみよう!
 
データベースへの接続編、今回はエクセルからMicrosoftSQL Server2005へ接続してみましょう。
筆者の環境がSQL2005ですので、SQL2005を元に説明しますが、SQL2000、SQL7.0でもVBAのコードは基本的に同じになります。

まずSQLサーバにtestという名前のデータベースを用意してください。領域は10MBも確保すれば十分でしょう。この中にSyainMSTを定義します。
Management StudioやEnterprise Manager等で直接テーブルを作成してもいいですが、Accessのアップサイジングウィザードを使用すると楽ちんです。前回のtest.mdbがそのまま使えます。ついでにデータも送っておきましょう。
(ウィザードを出すには、ツール>データベースユーティリティ>アップサイジングウィザード)


さて接続する方法はいくつかありますが、今回はその代表的な方法を3種類紹介します。

1.コードの中から直接IPアドレスを指定する方法
前回のAccessへの接続はこのやり方でしたね。

  Set CN = New ADODB.Connection
    CN.Provider = "Microsoft.Jet.OLEDB.4.0"
    CN.ConnectionString = ThisWorkbook.Path & "\test.mdb"
    CN.Open

これをこのように変更します。

  Set CN = New ADODB.Connection
    CN.Provider = "SQLOLEDB"
    CN.ConnectionString = "Data Source=192.168.X.X;" & _
                   "Initial Catalog=test;" & _
                   "User ID=sa;" & _
                   "Password="
    CN.Open

CN.Provider の指定が、"Microsoft.Jet.OLEDB.4.0"から"SQLOLEDB"に変わっています。今回接続する先はSQL Serverなので当然、OLEDBプロバイダはSQLOLEDBを指定します。

CN.ConnectionString がずいぶんごちゃごちゃしましたね。
Data Source=192.168.X.X の部分で接続先サーバのIPアドレスを指定します。
Initial Catalog=testは接続するデータベース名です。今回はtestという名前のデータベースをSQLサーバに用意しましたね。
User ID=saとPassword=の部分はSQLサーバのログインアカウントです。お使いのSQLサーバのログインプロパティにあわせてください。(今回はいわゆる"saのパスなし"というやつで説明します)

さて前回のコードを書き変えたら早速接続してみてください。データは表示されましたか?

この方法はコードの中に接続情報をすべて記述しているので他になにも用意しなくてもすぐに接続ができる点が良い点です。しかし逆にいうとサーバーのIPアドレスが変わったりデータベース名が変更になればコードを修正する必要がでてきます。

2.ODBCドライバ(システムDSN)による接続

次はODBCドライバによる接続に挑戦してみましょう。
先ほどのように接続文字列をコードの中に記述すると接続環境が変わったときにコードを修正する必要がありました。これは出来る限り避けたいことです。
そこで接続に係わる情報は専用のドライバソフトに一元管理させよう、プログラムからはそのデータソースを呼び出すだけで簡単にデータベースに接続できるようにしよう。という発想のもとMicrosoftより提唱されたデータベースアクセスの標準仕様がODBC(Open DataBase Connectivity)です。

まずODBCドライバにシステムDSNを追加してみましょう。
スタート>プログラム>管理ツール>データソース(ODBC)を選択します。ODBCデータソースアドミニストレータが起動します。システムDSNタブを選択、追加ボタンをクリックします。
データソースドライバの選択はSQL Server(一番下にあります)、データソースの名前はプログラムから呼び出すDSNの部分です。今回は"SysDSNtest"にしましょう。接続するサーバーにサーバのIPアドレス"192.168.X.X"を、次の画面ではログインIDとパスワードを設定します。さらに次の画面で既定のデータベースに"test"を選択。完了時にでるデータソースのテストで接続を確認してください。
システムデータソースにSysDSNtestが追加されました。



さあこのデータソースを早速プログラムから呼び出してみましょう。

  Set CN = New ADODB.Connection
    CN.ConnectionString = "Data Source=SysDSNtest;" & _
                  "User ID=sa;" & _
                  "Password="
    CN.Open

接続文字列がさっぱりしましたね。
Data Source=SysDSNtest の部分で先ほど作ったシステムDSNを呼び出す指定をしています。SysDSNtestのなかに接続環境のプロパティが記録されていますので、その情報をもとにSQLサーバに接続できるというわけです。

この方法のよいところは将来接続環境が変わったときにSysDSNtestの構成を変更するだけで、コードの修正が不要である点です。



3.ODBCドライバ(ファイルDSN)による接続

さてシステムDSNは確かに便利ですが、大規模オフィスのシステム変更があった場合、端末数が100台を超えるケースなどザラにあります。100台を超えるPCのシステムDSNを一台ずつ修正していくのはすごく骨が折れる作業ですし、あまり現実的だとはいえません。
そこでファイルDSNを使ってみましょう。これは接続情報の内容をそのまま拡張子dsnのファイルに書き出してくれます。
作り方は先ほどのソースアドミニストレータからファイルDSNタブを選択、最初にファイルを保存する場所を指定してやり、後はシステムDSNと同じやりかたで作成できます。データソースの名前は"FileDSNtest"にしておきましょう。



プログラムからはこのファイルDSNのある場所を指定してやるだけでOKです。
このファイルDSNをファイルサーバの共有スペースなどに置き、プログラムのほうで共有スペースのパスを指定してやればいいのです。
修正が必要な時は、サーバ内のファイルDSNを修正してやればすべての端末に修正が反映されます。
"FileDSNtest.dsn"はテキストファイルなのでテキストエディタ等で簡単に修正が可能です。

  Set CN = New ADODB.Connection
    CN.ConnectionString = "FILEDSN=" ThisWorkbook.Path & _
                  "\FileDSNtest.dsn;"
  CN.Open

サンプルでは実行しているブックと同じフォルダ内にFileDSNtest.dsnがあるものとしています。

"FileDSNtest.dsn"の中身は、
[ODBC]
DRIVER=SQL Server
UID=sa
DATABASE=test
APP=Microsoft Data Access Components
SERVER=192.168.X.X
こんな感じです。接続情報が記録されているだけですね。

今回いろいろなデータベースに接続する方法を紹介しましたが、どの方法も一長一短があります。

システムの規模、電算室等のメンテナンス要員の有無、将来のデータベースサーバ運用予定、等を考慮されたうえで最適な接続方法を決定されるのがよいかと思います。

 

>> 次の話にすすむ


サイト内検索ができます

Microsoft Most Valuable Professional

Microsoft MVP Excel
武藤 玄 プロフィール
 

■■■ 執筆した書籍 ■■■
 

EXCEL VBA 業務自動化
 

Excel VBA を5日でマスターする本
 

仕事を速くする Excel VBA 入門
 

Excel VBAと業務改善のポイントがわかる本
 

Access VBA ベーシック スタンダード
 

Excel VBA アクションゲーム作成入門
 

■■■ 連載中の記事 ■■■
 

Excel VBAで業務改善!
 

実務で使うExcel VBA
 


TOPページ


■ エクセルVBA超入門

 ・9ステップで"Hello World!"
  からオブジェクト指向まで!
  1."Hello World!"を表示しよう
  2.基本はデータの入出力
  3.繰り返し処理
  4.シートで簡易データベース
  5.名前をつけよう
  6.構造化プログラムに挑戦
  7.構造体を使ってみよう
  8.フォームを使ってみよう
  9.オブジェクト指向に挑戦

■ エクセルVBA中級編

 ・VBAでいろんなテクニック
  変数・関数のスコープ
  引数の参照方法を明示
  配列の中身を一気に複写
  識別子がよいコードを作る
  データ定義型をもっと知ろう
  定数と列挙型を活用しよう
  エラー処理の重要性1
  エラー処理の重要性2
  いろいろな条件分岐
  いろいろな繰り返し処理
  演算子について知ろう
  文字列操作 連結 変換 置換
  文字列操作 検索 比較 書式
  日付操作関数を知ろう
  数値操作・評価・その他関数
  並び替えソートをマスター
  いろいろな検索をマスター
  VBEditorを使いこなそう
  マクロの記録を活用しよう1
  マクロの記録を活用しよう2
  VBAからVBEを操作しよう1
  VBAからVBEを操作しよう2
  VBAからVBEを操作しよう3
 ・ワークシートを使いこなす
  セルの参照をマスターしよう
  セルの選択をマスターしよう
  セルの操作をマスターしよう
  セルの書式設定をマスターしよう
  行・列の操作をマスターしよう
  シートの参照をマスターしよう
  シートの操作をマスターしよう
  ブックの操作をマスターしよう
  ウィンドウの操作をマスターしよう
  イベントプロシージャを活用しよう
  ワークシートを印刷しよう1
  ワークシートを印刷しよう2
  音声(読み上げ)機能を操作しよう
  グラフを操作しよう
 ・ユーザーフォームを使いこなす
  ユーザーフォームを使おう
  UserFormsオブジェクト
  Labelコントロール
  TextBoxコントロール
  ComboBoxコントロール
  ListBoxコントロール
  CheckBoxコントロール
  OptionButtonコントロール
  ToggleButtonコントロール
  CommandButtonコントロール
  ScrollBarコントロール
  SpinButtonコントロール
 ・VBA関数の一覧
  Aから始まる関数の一覧
  Cから始まる関数の一覧
  Dから始まる関数の一覧
  Eから始まる関数の一覧
  Fから始まる関数の一覧
  Gから始まる関数の一覧
 
■ エクセルVBAを極める
 VBAスーパーテクニック
 
 ・データベースへ接続してみよう!
  CSVファイルへの接続
  ワークシートへの接続
  mdbファイルへの接続
  SQL Serverへの接続
  ADOレコードセットの操作1
  ADOレコードセットの操作2
 ・ファイルを操作してみよう!
  FileSystemObjectの操作
  Drive File Folderの操作
  TextStream ダイアログ
  ステートメントでファイル操作1
  ステートメントでファイル操作2
 ・他アプリと連携してみよう!
  ActiveXオートメーションの操作
 ・ゲーム技でマクロを超える
  エクセルで音を鳴らす1
  エクセルで音を鳴らす2  
  スクリーン座標を取得
  様々なイベント取得
  リボンUIを制御しよう1
  リボンUIを制御しよう2
  シート上でアニメを動かそう
 
■ 一歩上行くエクセル
 基本操作の完全マスター!

 
 ・あなたはいったい
  エクセルで何をしたいのか?
  エクセルで業務効率化
  エクセル関数を使いこなす
  エクセルの便利技
  エクセルは最高の帳票ツール
 ・エクセル基本操作上級編!
  セル選択、コメント、シリアル値
  オート機能を使いこなそう!
  参照、条件付書式、入力規則
  関数をもっと理解しよう!
  配列数式を有効利用しよう!
  データの正規化をしよう!
  ショートカットキーを利用しよう1
  ショートカットキーを利用しよう2
  Office用アプリを作成しよう!
  PowerPivotとExcelで簡単BI!
 ・世間の誤ったエクセルの
  べからず集
  エクセルで文章を書くべからず
  エクセルで図形を描くべからず
  エクセルでシステムをつくるな
 
■ エクセル関連その他

 ・エクセルコミニュティにあなたも
  参加しませんか?
  Excel関連リンク・コミニュティ
 ・VBの理解がVBAをマスターする
  最短距離!
  VB関連の老舗・大家サイト
 ・エクセルExcel大事典掲示板
 ・プライバシーポリシー

2000アイテムを超えるラベルを販売
送料無料、即納対応の優良ショップ
今買っているラベルより確実に安い!
OAラベルの販売専科グラフトラベル




エクセルExcel大事典ははリンクフリーです エクセル大事典Excel大事典
お問い合わせはこちら gengengen@yahoo.co.jp

Copyright© Gen Muto 武藤 玄 All Rights Reserved,