C3Lab研究室

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

最終更新日: 1998年 08月 22日 土曜日

JET Database 「CDAODB」 DAO Access class Rel 1

ダウンロードはこちら です


 MFC・CDaoDatabaseオブジェクトを利用すると簡単にDataBaseが利用可能です。

 ファイルの使用はVC++のサンプルソースと共に含まれていますので、ダウンロード 後に自己解凍ファイルなので適切なディレクトリに展開してください。そののち、Developer Studuioからプロジェクトを開いてください。
 CDaoDatabaseを呼び出しているクラスは、 cdaodb.cpp cdaodb.h の二つ ですので、新規プロジェクトで実験する場合はこの二つをコピーして使用してください。

次にこのクラスを使用した簡単なデータベースの初期化・読み込みの定義例を示します。

 動作については基本的にコメントをかなり埋め込んでいましたのでそちらを参考にしてください。また、CDaoDabatase・CDaoRecordset・CDaoTableDefクラスの内容についてはVisualCのDAOオブジェクトやDatabaseオブジェクトの項目がヘルプにありますのでそちらを参照するか、Mastering MFCのデータベースアプリケーションの作成も非常に役に立ちます。JET Database Engine等についてはマイクロソフトプレスの「JET データベースエンジンプログラマーズガイドー改定新版ー」に詳しく解説されています。特にレプリケーションは最適化についての理解は大規模DBには必須でしょう。

このソースコードはダウンロードファイルに含まれています。

#include <afxdao.h>
#include "cdaodb.h"

int CJETDB1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;
    // TODO: この位置に固有の作成用コードを追加してください
    CDAODB dbg;
//    remove("MyDatabase.mdb"); // DataBase初期化のためファイルを削除
    // ファイルが存在しなければ新規作成します。
    // デフォルトでは速度より共有による競合を解決すること
    // を優先に設計されています。
    // ファイルのオープンは共有モードでオープンするため、
    // ロックされているレコード以外はすべてのユーザーで
    // 書き込み共有が可能です
    // 実際に、このデータベースをACCESSでオープンしながら操作可能です。
    if( dbg.Create("MyDatabase.mdb")== FALSE)
        {if( dbg.Open("MyDatabase.mdb") == FALSE ) return -1; }
    else { // new DataBase
        dbg.CreateTable("Default");
        // 可変長のテキスト フィールドを作成します。
        dbg.CreateFieldInt("ID");
        dbg.CreateFieldStr("IDNAME");
        // 作成したてのテーブルはレコードオブジェクトを持たない
        dbg.CloseTable(); // automatic append created fields
    }
    BOOL b;
    b = dbg.OpenTable("Default");
b = dbg.OpenRecord(); // default : dbOpenDynaset,0 as Create CDaoRecordset
    long n = dbg.GetCount();
    if(n==0){
        // n=0 ではカレントレコードが存在しないことを示すので、
        // カレントレコードを新規作成する
        b = dbg.AddNew();
        b = dbg.Update();
    }else{
        // 追加用のレコード作成
        b = dbg.AddNew();
        b = dbg.Update();
    }
    n = dbg.GetCount();
    //--------------------
    b = dbg.SetPos(n); // 最後のレコードにカレントを移動
    b = dbg.Edit(); // カレントレコードを編集モードでロック
    b = dbg.Set("ID",n);    // カレントレコードのフィールド名"ID"に変数nを登録する
    b = dbg.Set("IDNAME","Sample");
    b = dbg.Update(); // 編集モードのロック解除
    //--------------------
    long m;
    m = dbg.GetLong("ID");
    b = dbg.CloseRecord();
    b = dbg.CloseTable();
    dbg.Close();
    return 0;
}

クラスのヘッダー定義は次のようになっています。参考にしてみてください 

//-------------------------------------------
// DAO Database access class for MFC CDaoXXX
//    programmed Copyright (c) by kitaro 1998

#include <afxdao.h>

class CDAODB : public CObject
{
    private : // CDaoDatabase Object
        CDaoDatabase *m_cdao;
        CDaoTableDef *m_tbl;
        CDaoRecordset *m_rs;

    private : //
        BOOL bAppend;    // Field Create and need append function flg
    public : // constructor / destructor
        CDAODB();
        ~CDAODB();
    public : // CDaoDataBase
        BOOL Create(LPCSTR filename, LPCTSTR lpszLocale = dbLangGeneral, int dwOptions = 0 );
        BOOL Open( LPCTSTR lpszName, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = _T("") );
        void Close(void);
        CDaoTableDef*     GetTable(void){return m_tbl;};
        CDaoRecordset*     GetRecord(void){return m_rs;};

    //------------------------------------------
        short GetTableDefCount( void );
        BOOL GetTableDefInfo( int nIndex, CDaoTableDefInfo& tabledefinfo, DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO );
        BOOL GetTableDefInfo( LPCTSTR lpszName, CDaoTableDefInfo& tabledefinfo, DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO );
        BOOL DeleteTableDef( LPCTSTR lpszName );
    //------------------------------------------
        BOOL CreateTable    (LPCSTR szTableName);
        BOOL OpenTable         (LPCSTR szTableName);
        BOOL CloseTable         (void);
        BOOL AppendField    (void);
        // create reguler field functions
        BOOL CreateField         (LPSTR lpszName,short nType , long lSize , long lAttributes = 0);
        BOOL CreateFieldStr         (LPSTR lpszName,long lSize = 255, long lAttributes = dbVariableField);
        BOOL CreateFieldDate    (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldCurrency(LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldBool    (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldByte    (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldInt         (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldLong    (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldSingle    (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldDouble    (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldLB         (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldMemo    (LPSTR lpszName,long lAttributes = dbFixedField);
        // create index
        BOOL CreateIndex( CDaoIndexInfo& indexinfo );
    //------------------------------------------
    // CDaoRecordset
        BOOL OpenRecord(int nOpenType = dbOpenDynaset, int nOptions = 0);
        BOOL CloseRecord(void);
        BOOL AddNew         (void); // pare w/Update function
        BOOL Update         (void);
        BOOL CancelUpdate(void);
        long GetCount    (void);     // Get Record Count
        BOOL Delete         (void);    // current delete and move first record automatically
        BOOL Delete         (long n); // delete n position
        BOOL Edit         (void);
        COleDateTime GetDateCreated(void);
        COleDateTime GetDateLastUpdated(void);
        // position function
        long GetPos         (void);    // Absolute Position
        BOOL SetPos         (long lPos); // absolute position
        float GetPerPos    (void);     // Percent Position
        // move function
        BOOL Move         (long n);
        BOOL MoveLast    (void);
        BOOL MoveFirst    (void);
        BOOL MovePrev    (void);
        BOOL MoveNext    (void);
        // status function
        BOOL IsBOF         (void);
        BOOL IsEOF         (void);
        BOOL IsDeleted    (void);
        BOOL IsOpen         (void);
        // Get field value function
        BOOL    Get             (LPCTSTR lpszName, COleVariant& varValue );
        BOOL    Get             (int nIndex, COleVariant& varValue );
        short    GetInt         (LPCSTR lpszName);
        short    GetInt         (int nIndex);
        long    GetLong         (LPCSTR lpszName);
        long    GetLong         (int nIndex);
        float    GetSingle     (LPCSTR lpszName);
        float    GetSingle     (int nIndex);
        double    GetDouble     (LPCSTR lpszName);
        double    GetDouble     (int nIndex);

        // Set field value function
        BOOL Set    (LPCTSTR lpszName, const COleVariant& varValue);
        BOOL Set    (int nOrdinal, const COleVariant& varValue);
        BOOL Set    (LPCTSTR lpszName, LPCTSTR lpszValue );
        BOOL Set    (int nOrdinal, LPCTSTR lpszValue );
        BOOL Set    (LPCTSTR lpszName, short n );
        BOOL Set    (int nOrdinal, short n );
        BOOL Set    (LPCTSTR lpszName, long n );
        BOOL Set    (int nOrdinal, long n );
        BOOL Set    (LPCTSTR lpszName, float n );
        BOOL Set    (int nOrdinal, float n );
        BOOL Set    (LPCTSTR lpszName, double n );
        BOOL Set    (int nOrdinal, double n );

        BOOL SetNull(LPCTSTR lpszName);
        BOOL SetNull(int nOrdinal);
        // Field Infomation
        BOOL GetInfo(int nIndex, CDaoFieldInfo& fieldinfo, DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
        BOOL GetInfo(LPCTSTR lpszName, CDaoFieldInfo& fieldinfo, DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO);
        //


};

Copyright (C) Kitaro 1998