最終更新日:2019-12-23データベースに接続/切断VBAでSQL発行するにあたり、まずはSQLを実行するデータベースに接続する必要があります。このSQL入門では、DB接続にはADOを使用します。SQLの発行とSQLの実行という言い方の違いクライアントでSQLを発行し、それを受け取ったDBサーバーがSQLを実行します。記事内では、時に区別なく使ってしまう事も出てくるかもしれませんが、適宜ご読み分けてください。SQLiteにADOで接続するVBA記述について解説します。あわせて他のDBへ接続する場合も紹介しておきます。ADOとはADOは、Microsoftが提供するデータベースアクセスのためのソフトウェア部品です。ライブラリを使用します。DBをActiveXコントロールの形で使えるようにしたプログラミングインターフェースになります。扱えるデータベースに特段の制限はありません。対応するドライバー、プロバイダが使用可能であれば、いろいろなDBに接続できます。ADOの扱い方については、以下で詳しく解説しています。Objects)の使い方の要点ADOはMicrosoftが提供するデータベースアクセスのためのソフトウェア部品です。OLEDBをActiveXコントロールの形で使えるようにしたプログラミングインターフェースになります。ここでは、ADOを使用したデータベースへの接続方法を解説します。ADOを使う準備VBEで参照設定します。Libraryこれを参照設定に追加して下さい。このように事前に参照設定することを、事前バインディングといいます。CreateObject関数を使い、事前に参照設定をしない方法もあります。実行時バインディングまたは遅延バインディングといいます。SQL入門では、事前バインディングを使ってマクロVBAを作成します。入力候補に、オブシェクトのメンバーが表示されますので、マクロVBAを書く際に便利です。CreateObject関数を使う場合の記述は適宜併記していきます。Driver;Database=C:\SQLite3\sample.db"'ここでSQLを発行します。Subこれだけで接続できてしまいます。Driver;Database=C:\SQLite3\sample.db"これがDBに接続する文字列で、間違っている場合はエラーになります。SQLiteの場合、フォルダが無ければエラーになりますが、ファイルが存在しない場合は自動的に作成されてしまいます。これはSQLiteだけの特種な挙動になります。Accessであればファイルが無ければエラーになります。上記VBAは以下のような記述もできます。Driver;Database=C:\SQLite3\sample.db"adoCon.Open'ここでSQLを発行します。SubNewとConnectionStringの書き方の違いです。VBAの動作としてはほぼ同じですので、どちらでも構いません。Driver;Database=C:\SQLite3\sample.db"'ここでSQLを発行します。Sub上記いずれの書き方を組み合わせても構いません。データベースに接続できたかの確認.Openでエラーにならなければ普通は正しく接続できていますが、ちゃんと接続できているかどうか判定したい場合も出てきます。それには、ADODB.ConnectionのStateプロパティを参照します。オブジェクトが閉じられたことを示します。オブジェクトが開かれていることを示します。オブジェクトが接続することを示します。オブジェクトのコマンドが実行されていることを示します。オブジェクトの行が取得されていることを示します。Subこの実行結果は、10となります。上記Stateプロパティの値と見比べてください。他のデータベースに接続する場合の接続文字列の例を紹介しておきます。Source=フルパス\sample.accdb"Access2007以降の場合です。PASSWORD=パスワード;"x.xはドライバーのバージョンになります。PCにインストールされているドライバーを指定します。ID=ユーザーID;Password=パスワード;"オラクルの場合は、Oracleクライアントのインストールが必要です。リスナーの登録をしておいて下さい。今後のためにクラス化しておく今後SQLを書いていく上で、DB接続を毎回気にするのは面倒です。DB接続部分については、別途SubまたはFunctionを用意しておきたいところです。今回のSQL入門では、今後の事を考えてクラス化しておくことにしました。VBAのクラスとは(Class,Property,Get,Let,Set)VBAを覚えて、いろいろ作りながらネットで調べたりしていると、クラスとかオブジェクト指向といった言葉に出くわします。VBEの「挿入」の一番下にある「クラスモジュール」は気になっていたかもしれません。このクラスモジュールを使ってクラスを作ります。Function一つ一つについては、難しいものはありません。今後の拡張を考慮して、直ぐに使わないプロパティも入れています。このクラスはまだ試作段階ですので、今後改良を重ねていきます。現時点(接続/切断)で必要な最低限の機能と若干の追加機能をいれた程度のものになります。エラー時の処理については単純にメッセージを出しているだけですが、今後機能拡張していく際に内容を追加変更していく必要が出てきます。If'ここでSQLを発行します。Sub実際に動かして確認してみましょう。"sample.db"を違う名称にして実行した時、"C:\SQLite3\"に新たにファイルができることも確認しておきましょう。データベースに接続/切断の最後に今回は単純にデータベースに接続する部分のみとなっています。SQL入門では、今後このクラスを使うことを前提にしたVBAサンプルを掲載していきます。いろいろなSQL発行と結果の受け取り方によって、このクラスも機能拡張して行くことになります。Next)|VBA入門8.セルに文字を入れるとは(Range,Value)|VBA入門9.空白セルを正しく判定する方法(IsEmpty,IsError,HasFormula)|VBA技術解説10.ひらがな⇔カタカナの変換|エクセル基本操作ホームSQL入門データベースに接続/切断このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。GASスプレッドシート入門スプレッドシート応用GAS入門GAS応用ホームSQL入門データベースに接続/切断このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。