DAO3.5の新機能

Updated 1997/08/03

By 富士通SSL)福岡寿和


DAOの基本

DAO(データアクセスオブジェクト)は、Visual BasicからAccessのデータファイルであるMDBを使う手段として開発されました。そのため、DAOの機能はAccessの機能と密接に関係していて、DAO3.0からDAO3.5へのバージョンアップは、Access95がAccess97へバージョンアップしたこととも関係しています。

ちなみに、 Accessのデータベースエンジンは、Microsoft Jetデータベースエンジンと言い、DAOから使うことをDAO/Jetと言います。

DAO3.5の新機能としては

  1. ODBC Direct
  2. 部分レプリケーション
  3. 前方スクロールRecordset
  4. MaxRecordsプロパティ
  5. SetOptionメソッド
などがあります。

DAO3.5の新機能
―ODBC Direct―

DAO3.5では、ワークスペースとしてJet以外にODBC Directが使えます。ODBC Directを選択したときは、JetがロードされずにRDO2.0がロードされます。つまり、ODBC Directは、ODBCを直接使うのではなく、あくまでもRDO2.0を使ってODBCを使う手段です。

図 1 DAO/Jet,ODBC Direct,RDOの違い

ですから、RDO2.0を直接使うときに比べて性能は落ちますが、DAOインターフェイスでRDOのほぼすべての機能が使えます。Accessを対象としているアプリケーションを手っ取り早くSQL Server用に書き換えるには有効かもしれませんが、AccessでTransact SQLが動かない現状では、SQL Serverの性能や機能を充分引き出す場合に、SQL文の変更などが生じてしまいます。

DAO3.5からODBC Directを使うときは、CreateWorkspaceメソッドでODBC Directワークスペースを作成します(リスト1)。また、DefaultTypeメソッドのrdODBCを設定して、DAOのデフォルトをJetではなくODBC Directに切り替えることもできます。

DAO/JetとODBC Directの性能を比較したところ、ODBC Directは、DAO/Jetよりもかなり良い結果を示しています。

図 2 ODBC Direct レコード読込時間グラフ

ただし、機能的な面に注目すると

などは、DAO/Jetでのみ使えるので、ODBC DirectとDAO/Jetの使い分けが重要になってきます。
同様に、 などのRDO2.0の新機能は、 ODBC Directからは使えないので、ODBC DirectとRDO2.0の使い分けも重要です。

ただし、

などはODBC Directからでも使えます。

DAO3.5の新機能
―部分レプリケーション―

● レプリケーションとは?
例えば複数のパソコンから同じMDBを共有する方法として、共有ディレクトリ上にMDBを置いて、ネットワークを通して使う方法があります。しかし、この方法では、MDBを使うときにネットワークがつながっていなければいけません。

レプリケーションは、あるMDBを元にレプリカと呼ばれるコピーを作成し、その複数のコピー間で、データやオブジェクトの更新内容を交換して、内容を同期します。そして、同期処理中以外はネットワークがつながっていなくてもレプリカが使えるので、結果的に1つのMDBを共有しているのと同じようにアプリケーションから扱えます。

図 3 レプリケーション

レプリカ上のレコードへの追加、削除および変更は、次回のレプリケーション実行時に相手側に反映されます。もし、同じレコードが両方で更新されたときは、レプリケーションの競合が発生します。このときDAO3.5は、バージョン番号の多い(変更が多い)レプリカの内容を採用し、バージョン番号も同一のときは、ReplicaIDの小さいレプリカの内容を採用します。採用されなかったレプリカは、競合テーブルにレコードの情報が格納されるので、競合の解消方法をプログラムで変更できます。

● 部分レプリケーション
レプリケーションは、Visual Basic 4.0のDAO3.0でも使うことができました。しかし、DAO3.0では、フルレプリケーションといって、テーブルやオブジェクトごとのレプリケーションのみサポートしていました。RDO3.5からは、部分レプリケーションといって、MDBに含まれるレコードの一部分のみレプリケーションが行えるようになりました。

部分レプリケーションを使えば、レプリカの配付先ごとに、必要な部分のみを同期するので同期処理のパフォーマンスが向上します。さらに、重要データを関係ない部署に配付したレプリカに転送しないように指定できます。

部分レプリケーションを行うためには次のような手順が必要です。

  1. デザインマスターの作成(リスト2
  2. 部分レプリカの作成(リスト3
  3. レプリケーションの実施(リスト4
サンプルでは、MDI子画面が1つも開いていないときに[ツール]メニューで(1)と(2)が実行できます。また、[ファイル]-[開く]メニューでレプリカを開くと[ツール]メニューで(3)が実行できます。

図 4 部分リプリケーション

サンプルで(1)を行うとデザインマスターにs_Generationフィールドが追加されます。このフィールドはレプリケーションの管理に使うフィールドで、レコードが変更されると0に設定されます。

なお、Microsoft Access 97 Developer Editionにはレプリケーションマネージャーというレプリカデータベースの作成や維持をするユーティリティが含まれていますが、Visual Basic 5.0には含まれていません。Visual Basic 5.0でも、DAO3.5を使って同様のものを作れますが、受託開発でレプリケーションを使うときは、最低でも開発環境と実行環境のそれぞれ1台づつにAccess97 Developer Editionを導入しておくのが得策かもしれません。

DAO3.5の新機能
―前方スクロールRecordset―

MoveNextメソッドのみを使ってレコードの移動を行うときは、DAO3.5の新機能である前方スクロールタイプのRecordsetオブジェクトを使うと若干パフォーマンスが向上します。

図5 前方スクロールタイプのレコード件数別移動時間グラフ

しかし、そのパフォーマンスと引き換えに、前方スクロールタイプのRecordsetで使えないメソッドとプロパティを表1にまとめました。
表 1 前方スクロールタイプの制限 AbsolutePostionプロパティ Bookmarkプロパティ PersentPositionプロパティ Sortプロパティ Cloneメソッド MoveLastメソッド MovePreviousメソッド MoveFirstメソッド FindFirstメソッド FindNextメソッド FindLastメソッド

DAO3.5の新機能
―MaxRecordsプロパティ―

MaxRecordsは、Jet用のSQL文にあるTOP述語に変わるプロパティではありません。TOP述語は、レコード件数を制限するものですが、MaxRecordsプロパティは、指定した数の行がRecordsetオブジェクトに返されたところでレコードの取り出しを中止するだけです。そのため、SELECT文のなかにTOP述語を埋め込んだときと異なり、MoveNextメソッドを実行するとすべてのレコードを取り出すまでEofが発生しません(リスト5および図6)。

DAO3.5の新機能
―SetOptionメソッド―

SetOptionメソッドは、レジストリの内容を一時的に変更して、DAO3.5の動作環境を変更するメソッドです。一度このメソッドを使うと、再びSetOptionメソッドを使うかDBEngineオブジェクトを閉じるまで、そのアプリケーションの中で変更後の値が有効になります。

おわりに

DAOは、あくまでもローカルにあるデータファイルを操作する方法です。ですから、DAOからリモートデータベースに接続したり、ファイルサーバー上のMDBファイルを共有して複数端末から更新したりするシステムは、DAOに無理をさせることになるので、本来の機能や性能が発揮できないかもしれません。確かに、DAO3.5からは、ODBC-Directでリモートデータベースと接続する方法が提供されていますが、RDO2.0のすべての機能が使えるわけではありません。

やはり、Visual Basicの豊富な機能を適材適所に使うことが良いシステムを構築する秘訣でしょう。


テスト環境
Server:FMV5200T5(32MB)
 NT4.0Server(SP2)+SQL Server6.5
Client:FMV5200T5(64MB)
 NT4.0Workstation(SP2)

Visual Basic 開発者の手引き | Visual Basicコースホームページ
int21 ホームページ | PCDN ホームページ



Copyright (c) 1997 Toshikazu Fukuoka All Rights Reserved.
For questions or comments, please send mail to: pcdn@int21.co.jp