C3Lab研究室

Back to Title Page(OpenLab)タイトルページへ戻る

最終更新日: 1998年 08月 21日 金曜日

JET Database Engine/ActiveX Data Objectについて


 ADOを利用すると簡単にDataBaseが利用可能ですが、その利点と使用法はどういった ものになるのでしょうか? ネットワークDB等が多くの話題にのぼっていますがどういういった 使い方をすればよいのか悩む方も多いと思います。こういった技術は本で学ぶより実際に 実地を行った方が早いので実験&検証してみました。IIS4+ASPからもアクセス の実験を検証していましたので参考にしてください。

 以下に、動作検証用のコードを2種類記載しました。

 この方法ではODBCをDSNを使用しないため、ODBCに対して登録せずに動作します。また、ODBCを使用しないことから、ローカルディレクトリにゴミがたまる等管理が面倒になる可能性もありますが、MDBファイルを使用するのであればもっとも簡単ではないでしょうか。また、ファイルの共有や競合問題もOpenする段階で決定でき、今回は検証用のプログラムのため省略しましたが、TRY/CATCHでエクセプションをスルーして処理することで適切な処理が望めます。

 

MFCによる動作検証関数

 ApplicationWizardで自動生成したコードのVIEWのOnCreate (WM_CREATE)ハンドラーでADOの作成を行ってみました。

#include <afxdao.h>


int CJETDB1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;
   
    // TODO: この位置に固有の作成用コードを追加してください
    remove("MyDatabase.mdb");    // 以前のファイルを削除
    CDaoDatabase db;                  // DAODataBase オブジェクト生成
    db.Create("MyDatabase");      // ファイル新規作成
    CDaoTableDef table(&db);      // テーブルオブジェクト生成
    table.Create("SampleTable");  // テーブル作成
    table.CreateField("ID", dbText, 255, dbVariableField);           // テーブルにフィールド生成
    table.CreateField("IDNAME", dbText, 255, dbVariableField);   // テーブルにフィールド生成
    table.CreateField("Name", dbText, 255, dbVariableField);        // テーブルにフィールド生成
    table.Append();                               // フィールドをテーブルに関連付ける
    CDaoRecordset rs(&db);                   // レコードセットオブジェクト生成
    rs.Open(&table,dbOpenDynaset,0);   // レコードセットオブジェクトをオープン
    rs.AddNew();                                  // 新規レコードセット代入準備
    short sFieldCount = rs.GetFieldCount(); // テーブル内のフィールドの数を修得 ここでは使用していない
    rs.SetFieldValue("ID","0");                   // サンプルデータ代入
    rs.SetFieldValue("IDName","kitaro");     // サンプルデータ代入
    rs.Update();                 // レコードセットをアップデート
    rs.Close();                   // レコードセットオブジェクト解放
    db.Close();                  // データベースオブジェクト解放
    return 0;
}

IIS4+ASPの動作

 ASPページから呼び出されるサーバーオブジェクトの場合、カレントディレクトリは IISがインストールされているページのルートになりましたので、
msdao15.hはmsdao15.dllよりClassWizardにより生成しました。

#include "msado15.h"

VARIANT HelloWorld::TestADO1()
{
    CString strResult;
    // TODO: ここにディスパッチ ハンドラ コードを追加してください。
    CDaoDatabase db;
    // データベースを作成します。
    db.Create("MyDatabase"); // DataBaseはカレントディレクトリ (C:\ など)に作成されます
    CDaoTableDef table(&db);
    table.Create("SampleTable");
   // テーブルをコレクションに追加するには、少なくとも 1 つの
   // フィールドが定義されている必要があります。
   // 可変長のテキスト フィールドを作成します。(テキストのみ)
   table.CreateField("ID", dbText, 255, dbVariableField);
   table.CreateField("IDNAME", dbText, 255, dbVariableField);
   table.CreateField("Name", dbText, 255, dbVariableField);
   table.Append();  // テーブルを Tables コレクションに追加します。
    db.Close();
    strResult = "<h3>DataBase作成しました<h3>";
    return (COleVariant)strResult;
}

 

Copyright (C) Kitaro 1998