目次へ戻る

VBにおけるDB接続方法の学習
 
■用語
参照:http://e-words.jp/p/c-os-kind-windows-programming-database.html 
 
MDAC
●ODBC
読み方 : オーディービーシー
フルスペル : Open DataBase Connectivity
〜 Microsoft社によって提唱された、データベースにアクセスするためのソフトウェアの標準仕様。各データベースの違いはODBCドライバによって吸収されるため、ユーザはODBCに定められた手順に従ってプログラムを書けば、接続先のデータベースがどのようなデータベース管理システムに管理されているか意識することなくアクセスできる。
 
windows用の接続ドライバ。OSの管理ツールで設定する。ドライバがないものはインストールして対応できる。
 
 
●OLE DB
読み方 : オーエルイーディービー
フルスペル : Object Linking and Embedding DataBase
〜 Microsoft社によって開発された、データベースの種類によらず統一的な手法でデータベースにアクセスするためのプログラミングインターフェースODBCはOLE DBの一部であり、リレーショナルデータベースにアクセスする手段を提供する。OLE DBはCOMベースのコンポーネント(プログラム部品)の集合体として実現され、どんなプログラミング言語からでも利用することができるようになっている。
 
 
●ADO
ADO 
読み方 : エーディーオー
フルスペル : ActiveX Data Objects
〜 Microsoft社が提供するデータベースアクセスのためのソフトウェア部品。OLE DBをActiveXコントロールの形で使えるようにしたプログラミングインターフェース。これを使うと、Visual BasicやVBScript、C言語/C++言語などから、共通の方法で簡単にデータベースにアクセスできるようになる。
 
●DAO
読み方 : ディーエーオー
フルスペル : Data Access Object
〜 Microsoft Accessによって作成されたデータベースを操作するためのプログラミングインターフェース。データベースの作成を含め、あらゆる操作をプログラムから利用することが可能。同社のプログラミングツール「Visual Studio」シリーズに標準で添付されており、Visual BasicやVisual C++などで利用することができる。
 
●RDO
読み方 : アールディーオー
フルスペル : Remote Data Objects
〜 Microsoft社が提供している、ODBCを介してデータベースを操作するためのプログラム部品。Visual Basicなどで記述されたプログラムから呼び出して利用する。ODBCをOLEオートメーションの形で利用できるため、様々なプログラミング言語から呼び出すことができ、また、ODBCに対応したデータベースなら何でも操作することができる
 
●Jetデータベースエンジン
【Jet database engine】
読み方 : ジェットデータベースエンジン
〜 Microsoft社が開発したリレーショナルデータベースエンジンMicrosoft Access用に開発されたもので、現在ではWindowsに統合され、様々な製品から利用されている。
 
 専用のデータベースの他、dBASEやParadoxなどの他社製データベースへのアクセス機能もある。また、ODBCへのアクセスも提供されるので、ODBCに対応したインターフェースを持つデータベースならすべて(ODBCの機能の範囲内で)アクセス可能である。
 
 同社には、これとは別に、MSDE(Microsoft Database Engine)というリレーショナルデータベースエンジンがある。これはもともとSQL Serverのエンジン部分を切り出したものである。スピードやスケーラビリティ、セキュリティなど、性能と機能のあらゆる面でJetよりも圧倒的に優れているが、大量のメモリを消費するため、リソースの限られたコンピュータではJetのほうが有利な場合もある。
 
●MDAC
読み方 : エムダック
フルスペル : Microsoft Data Access Components
〜 Microsoft社が提供するデータベースアクセスのためのプログラム部品の集合。ADO、ODBC、OLE DBの各コンポーネントから構成される。データベースのメーカーの違いや種類の違いによらない統一的なデータベースアクセスを提供する。
 
 
 
 
**** 関連用語 *****************************
●COM 
読み方 : コム
フルスペル : Component Object Model
〜 Microsoft社が提唱する、部品化されたプログラムを作成・利用するための基盤となる技術仕様。特定の機能のみを持つプログラム部品を組み合わせることでアプリケーションソフトの開発が容易になる。この仕様に基づいてデータのやりとりができるプログラム部品のことをCOMコンポーネントと呼ぶ。COMコンポーネントは開発に使った言語やコンポーネントのある場所などに拠らず、どの言語からでも、どこからでも利用することができる。ネットワークを通じて別のコンピュータ上にあるCOMコンポーネントを利用する技術をDCOMと言う。これらの技術はWindowsだけでなく、UNIXやMac OSにも移植されている。コンポーネント開発が楽にできるよう改良された次世代のCOM+の開発が進んでおり、Windows DNAの中核技術として期待されている。
 
●ActiveXコントロール
【ActiveX control】
読み方 : アクティブエックスコントロール
〜 Microsoft社が開発したソフトウェアの部品化技術。従来OLEコントロールと呼ばれていた技術に、インターネットに対応するための拡張を施したもの。
 
 ActiveXコントロールはインターネットやイントラネットを通じてWebサーバからダウンロードされ、同社のWebブラウザであるInternet Explorerに機能を追加する形で使用される。
 
 同社を含め各社が様々なActiveXコントロールを公開しており、Webページ上で音声や動画を再生するためのActiveXコントロールや、サーバとクライアントの間で対話的に情報をやりとりすることができるActiveXコントロールなど、様々なものがある。
 
 プログラムをダウンロードしてWebブラウザ上で実行するという点ではJavaアプレットに近いが、ActiveXコントロールはネイティブコードで構成されているためJavaアプレットよりも動作が速く、また、Windowsが用意している機能をすべて使うことができるという利点がある。
 
 反面、Javaアプレットよりもセキュリティが低く、悪意のあるActiveXコントロールによってコンピュータが乗っ取られたり破壊される危険性が指摘されている。
 
 
 
■VBAからのデータベースへの接続方法は主に以下の3種類です。(MSクエリ操作は除きます。)
参照:http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130.html 
1.DAO・・・Microsoft Access(Microsoft Jet)のデータベースエンジンを直接取り扱います。単一システムか小規模でローカルなシステムに向くものとされているようです。
※なお、Access2000以降では、ADOが標準のインタフェースになっているようです。
 
★これから作るPGMではあまり使わないほうがいいようである。
 
2.RDO・・・Excel97時代からあるODBC(Microsoft Open Database Connectivity)でのデータベース接続を標準的に取り扱うもので、本来、「業界標準のインターフェイス」とされていたものです。現在はADOに取って替わりつつありますが、中にはODBC経由でADO記述をしている場合が多く、このRDOでの記述の方が効率が上がる場合があります。オブジェクトの取り扱いが違うだけでSQL部分は全く同じであり、現状ではバージョン2.0のみが標準搭載されているため、参照設定などでバージョン問題に左右されにくい利点もあります。
最近の一種流行しているPostgreSQL,MySQLなどの「フリー」のデータベースエンジンでのVBなどからの接続はすべてODBC接続ですが、現在では次に説明するADOで記述することが推奨されています。
※RDOでのデータベース接続を実現するには、Windowsのコントロールパネルの「データソース(ODBC)」で接続に関する設定を完了させておく必要があります。
 
 
3.ADO・・・RDOが「業界標準のインターフェイス」と唄われていたのに対し、ADOはむしろMicrosoftの独自の方式かも知れません。しかし、別名で「OLE-DB」などと呼ばれ、簡単にアプリケーションに組み込めることを唄い文句にしたもののようです。
既に最近のWindows標準(MDAC)や、Microsoft SQL Server,Microsoft AccessではADOを「標準」としているようなのでDAOからは早々に移行される方が良いようです。
また、ODBC接続のデータベースについてもADO記述で接続ができます。Microsoft自身はADOでの接続を推奨しており、単独動作ではRDOの方がレスポンスが良い場合もあるようですが、過去の資産でない限りあえて今からRDOを選択する必要はないでしょう。
RDOとADOはテーブルの参照、更新の実体は共にSQL言語自体で行なうため、コンポーネントの呼び出し以外には差異はありません。
 
サイト作者の意見
このような3つの方式を説明すると、「どれが一番良いか」「どれが一番速いか」と質問したいと思う方が多いのが普通です。ですが残念ながらこのような質問にはお答えできかねます。
なぜなら、そのデータベースプロダクトやWindows環境、MDACのバージョン、またどのようなアクセス効率(同時アクセス規模やネットワーク環境)か、などで選択するべき方法が変わってくるようですから。
すでに環境が整っていて、記述方法だけを選択しかねているのでしたら、実測の上で判断される方が良いと思います。
これ以降の説明のサンプルでは、ローカルディスクにデータベースファイルがあるためか、実測比較はしていませんがレスポンスの体感ではDAOが速いように感じます。
 
感触としては、Microsoft Access(Microsoft Jet)のデータベースエンジンでのローカル固有動作はDAOがベストのようです。
これからデータベース操作を試してみようという方には、Microsoftの取り組み方を見てもADOが主流になることでしょう。従来のODBC接続のデータベースでもMicrosoft Access(Microsoft Jet)でもADOで接続できるわけですから、この方式をマスターしておくことをお勧めします。
 
 
 
他の参照サイト
●マイクロソフト ADO: Learn to Love It
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpperiod/period98/VBDev/April/vb0498.asp 
 
 
個人の結論
新規で作成するにあたっては、ADOを使うのが前提であろう。しかし、過去に作られたシステムでは、動く限り改修する必要はないのではないかと思われる。バージョンアップ等で動かない可能性はあるが、参照設定で最新バージョンにすればだいたい動くことが多いと思う。
DB接続にかんしては、まだまだわからないところが多いので、機会をみて調べていきたい。その際、今のシステムでどんな使い方をしているか比較しながら見ていくことが必要だろう。
 
 
SQL・テーブルの結合を見直す
参照:http://www.techscore.com/tech/sql/06_01.html 
●基本的な結合
 
 SELECT 受注表.受注番号,顧客表.顧客名,
     商品表.商品名,受注表.受注個数,受注表.納品日
     FROM 受注表,顧客表,商品表
     WHERE 受注表.顧客コード = 顧客表.顧客コード
        AND 受注表.商品コード = 商品表.商品コード ;
 
 
SQL の基本的な結合作業は、結合されたテーブルを取り出して、考えられる限りの行の組み合わせを調べ、結合された 2つ以上のテーブルから 1 行ずつ取り出すというものです。この操作は、デカルト積と呼ばれています。
 
このように、外部キーを親キーに結び付けている結合を自然結合と言います。しかし、SQL では設計されたリレーションシップによるデータの抽出だけでなく、データの内容に基づくリレーションシップによるデータの抽出も行えます。たとえば、納品日が '20010401' の日に納品する商品名を抽出するには次のように SQL を書きます。
 
 SELECT 受注表.納品日,商品表.商品名
     FROM 受注表,商品表
     WHERE 受注表.納品日 = '20010401'
     AND 受注表.商品コード = 商品表.商品コード ;
 
※SELECT の後に「DISTINCT」を置けば、重複するものを表示させないようにできます。
 
 
●自己結合
自己結合とは同じテーブル同士の結合のことをいいます。結合は 2つ以上のテーブルに対して行われますが、それらが別のテーブルである必要はありません。自己結合は 2つのまったく同じテーブルの結合として実行されます。
 
テーブルの自己結合を行う際に問題なのは、テーブルの名前も列の名前も全て同じだという点です。これを解決するために、テーブルに一時的な名前を付けます。この一時的な名前のことをエイリアスといいます。範囲変数または相関変数とも呼びます。sample.17-3 は、商品表の単価が同じである商品名と単価を表示するものです。
 
 SELECT A.商品名,A.単価 FROM 商品表 A,商品表 B
     WHERE A.単価 = B.単価
     AND A.商品コード <> B.商品コード ;
 
 
●特殊な結合演算子
■ CROSS JOIN
結合述語のない結合に相当します。すなわち、ストレートなデカルト積です。
 
 SELECT A.甲,A.乙,B.あ,B.い
     FROM A表 A CROSS JOIN B表 B ;
 
★すべての組み合わせが表示される。
 
■ NATURAL JOIN
自然結合は一般に、外部キー値から親キー値への照合に基づいた結合を指します。ただし、SQL92 規格ではこの用語が少し違った意味で使用されています。SQL92 規格では、同じ名前を持つ 2つの列が親キーと外部キーであるかのように照合されます。つまり、そのデータベース設計が列名の一致は実際に親キーと外部キーをあらわすと取り決めている場合に、NATURAL JOIN 演算子を使用すべきだと、いう考え方です。
 
★〜省略
 
■ 指定結合
クエリに直接指定された条件に基づいた結合です。クエリの WHERE 句の代わりに、FROM 句で結合を行うための機能を提供します。
 
 
 
■ UNION JOIN
明示的または暗黙的に指定された述語を指定せず、照合やデカルト積の抽出は行われません。<テーブル A> のすべての行を取り込み、<テーブル B> の列に NULL を設定し、さらに <テーブル B> の行をすべて取り込み、<テーブル A> の列に NULL を設定した出力テーブルを生成します。
 
 
 
PostgreSQL と MySQLについて
〜日経システム構築 2005.5月号より(P.84)
 
オープンソースである二つのDB。
それぞれに一長一短がある。ポイントとしては
(1)DBMSとしての基本機能・・・Postは基本機能充実。Myも検索性能は高い。
(2)DBサーバーをスケールアウトし、信頼性/性能を確保しやすいか・・・Myはレプリケーション機能を備える。
(3)バックアップ、バージョンアップなど・・・Postはデータのダンプ、リストアが基本
 
その他
・SAP、トリガーはPostあり。Myは2005夏の5.0で装備する予定。
トランザクション機能はPostのみ。MyはInnoDBでOKだが、使用者からは?が。
・検索が早いのはMyとのこと。
 
 
<WORD>
PostgreSQL 
読み方 : ポストグレス・キューエル
 
 オープンソースのオブジェクトリレーショナルデータベース管理システム(ORDBMS)の一つ。BSDライセンスによるフリーソフトウェアである。
 
 カリフォルニア大学バークレー校で開発されたデータベースシステムPOSTGRESを元に、世界中のプログラマたちにより開発された。POSTGRESプロジェクトは、1986年にスタートし、1994年に開発が停止。現在データベースシステムで広く用いられている、オブジェクトリレーショナル概念の草分けであった。
 
 1995年、Andrew Yu氏とJolly Chen氏がPOSTGRES 4.2を改良し、SQL準拠の問い合わせ言語をサポートしたPostgre95をリリースした。その後インターネット上で開発が続けられ、1996年末に、PostgreSQL 6.0としてリリースされた。
 
 PostgreSQLは、主にPC-UNIX系のOSをターゲットとし、SQL92/SQL99など最新の機能をサポートしている。マルチバイト拡張も行われており、日本語や中国語、韓国語など、ASCII文字以外を扱う言語においても使用することができる。信頼性も高く、ApacheなどのWWWサーバと連携させて使用されることも多い。
 
 
MySQL
読み方 : マイエスキューエル
 
 TCX DataKonsultAB社などが開発している、オープンソースのリレーショナルデータベース管理システム(RDBMS)。
 
 マルチユーザ、マルチスレッドで動作し、高速性と堅牢性に定評がある。オープンソースなので基本的には無償で利用することができ、国内では有償でサポートを提供する企業もある。
 
 Windowsや各種UNIX系OSなど、多くのプラットフォームで動作するのも特長の一つ。PostgreSQLなどと並んで人気の高いシステムである。
 
 
DBMS
読み方 : ディービーエムエス
フルスペル : DataBase Management System
 
 共有データとしてのデータベースを管理し、データに対するアクセス要求に応えるソフトウェア。データの形式や利用手順を標準化し、特定のアプリケーションソフトから独立させることができる。また、データの管理を専門のソフトウェアに任せることは、アプリケーションソフトの生産性や性能、資源の利用効率の向上につながる。管理するデータの表現形式(データモデル)によりいくつかの種類に分類でき、代表的なものにはカード型、リレーショナル型、オブジェクト型などがある。現在最も広く普及しているのはリレーショナル型(RDBMS)で、大規模システムではOracle社のOracleが、小規模システムではMicrosoft社のAccessが、それぞれ市場の過半を占めている。
 
トランザクション機能
一連の処理において、万が一、エラー(回線障害等)が発生した場合に、その処理全体が自動的にロールバック(キャンセル)される仕組のことです。
 
スケールアウト
読み方 : スケールアウト
 
 サーバの数を増やすことで、サーバ群全体のパフォーマンスを向上させること。1台のサーバが仮に10人のユーザしか処理できないとしても、サーバを2台に増やして負荷を分散すれば20人のユーザに対応できる、という理屈である。
 
 スケールアウトした場合、複数のサーバを連携して動作させることになるため、メンテナンスや障害発生時にもサービスを完全に停止させる必要がない点が利点となる。反面、サーバの台数が増えるために管理の手間が増大し、ソフトウェアのライセンス料金も高額になりがちなことが欠点とされている。
 
 複製や同期が容易であり、また複製しても問題の起きないデータを扱う場合には、1台のサーバで機能や性能を強化する「スケールアップ」よりもスケールアウトの方が適していると言われる。
 
レプリケーション
読み方 : レプリケーション
別名 : 複製
 
 データベース管理システムが持つ負荷分散機能の一つ。あるデータベースとまったく同じ内容のを複製(レプリカ)をネットワーク上に複数配置し、通信回線や1台1台のコンピュータにかかる負荷を軽減する仕組みのこと。マスターデータベースとレプリカは、ネットワークを通じて互いにデータを交換しあい、常に内容が一致するようにできているため、一ヶ所でデータを更新すると、マスターとすべてのレプリカに自動的に更新内容が伝播する。