SC(非公式) Advent Calendar 2017 23日目です!
■今の業務について
現在、金融系のお客さんのところでVBAを使って仕事をしています。
いろんな情報をまとめて管理しやすくする、って感じのアプリを作ってます。(大雑把にですが...)
その際にADOというものに出会い、いろいろ興味深く感じたことがあったので今回はそこらへんについて話そうかと思います。
■まず、ADO(ActiveX Data Objects)とは
ADOとは、Microsoftが提唱しているデータアクセス技術のことである。
ADOは、OLE DBを利用して、アプリケーションからAccess、SQL Serverをはじめ、Oracleなどのさまざまなデータソースへ統一的で高性能なアクセスインタフェースを提供するCOMベースのデータベースアクセス技術である。
ADOは、以前のADOとRDOの機能を統合したMicrosoftの戦略的技術として開発された。ADOは、アプリケーション、言語などに依存しないインタフェースであり、開発者は扱うデータベースごとに別々に実装する必要がないというメリットがある。
Weblioより引用(https://www.weblio.jp/content/ADO)
上に説明がありますが、簡単に言えば"いろんなデータベースにアクセスできる便利なもの"です。
ここで驚いたのが、ExcelにもADOで接続できるということです。つまりExcelをDBとして使うことができるのです。普段Excelを使うことはよくありますが、こんな使い方があったとは知りませんでした。
一行目がフィールドとして認識され、1シート1テーブルとなっています。
これにSQLを投げてデータを取ってきます。
では実際にDB(Excel Book)からデータをとってきましょう。
接続、実行の書き方はこのように書きます↓↓(コード書くのへたくそです)
社員番号の列に数字、文字列混合したものが入っています。
OracleやSQL Serverなら型を指定するため、そもそもこんなことはないと思います。
しかし、Excelの場合は型を指定するということができません。
Microsoftサポート(https://support.microsoft.com/ja-jp/help/278973/excelado-demonstrates-how-to-use-ado-to-read-and-write-data-in-excel-w)
最初の8レコードの型をみて、多いものがそのカラムの型となるようです。
なので先ほどのテーブルをSELECTした結果はこうなります。
先頭8レコードのうち数値型:3 文字列型:5 だったので
カラム 社員番号 の型は文字列とみなされ数値部分は取得できませんでした。
どうやら数値が優先されるようですね。
他の型はどうなるか試していないので、時間のある時に優先度序列を調べてみたいですね。
ADOに関しては以上となります。
■おまけ
先ほどのADOの実行コード(↓コレ)をみて気になった方がいるかもしれませんが、この関数、パラメータを渡されてます。実はこれ、ボタンに引数を持たせてそれによって取り込むシートを変えているんです。ボタンに引数を持たせられるなんて知ってましたか!?(私は知らなかったです。)
■終わりに
いかがでしたでしょうか。
私が業務中に関心したことをとりあえず書いてみたのですが、わかりづらかったかもしれません...
たいしたことは書けませんでしたが少しでも参考になることがあったなら幸いです。