LoginSignup
27
28

More than 5 years have passed since last update.

ADOについて

Posted at

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を使うことはよくありますが、こんな使い方があったとは知りませんでした。

DB用Bookの中身はこんな感じ↓↓
image.png

一行目がフィールドとして認識され、1シート1テーブルとなっています。
これにSQLを投げてデータを取ってきます。

では実際にDB(Excel Book)からデータをとってきましょう。

今回使うテーブルはこちら
image.png

これを下記のマクロを使って取得したのがこちら
image.png

接続、実行の書き方はこのように書きます↓↓(コード書くのへたくそです)
image.png

ではこんなケースはどうなるでしょう
image.png

社員番号の列に数字、文字列混合したものが入っています。
OracleやSQL Serverなら型を指定するため、そもそもこんなことはないと思います。
しかし、Excelの場合は型を指定するということができません。

では型はどうなるかというと
image.png

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した結果はこうなります。
image.png

先頭8レコードのうち数値型:3 文字列型:5 だったので
カラム 社員番号 の型は文字列とみなされ数値部分は取得できませんでした。

それなら4:4 の場合はどうなるのでしょう(↓こんな場合)
image.png

結果はこうなりました。
image.png

どうやら数値が優先されるようですね。
他の型はどうなるか試していないので、時間のある時に優先度序列を調べてみたいですね。

ADOに関しては以上となります。

■おまけ

先ほどのADOの実行コード(↓コレ)をみて気になった方がいるかもしれませんが、この関数、パラメータを渡されてます。実はこれ、ボタンに引数を持たせてそれによって取り込むシートを変えているんです。ボタンに引数を持たせられるなんて知ってましたか!?(私は知らなかったです。)

image.png

参考
image.png

■終わりに

いかがでしたでしょうか。
私が業務中に関心したことをとりあえず書いてみたのですが、わかりづらかったかもしれません...

たいしたことは書けませんでしたが少しでも参考になることがあったなら幸いです。

27
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
28