C3Lab研究室

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

最終更新日: 1998年 10月 20日 火曜日

JET Database 「CDAODB」 DAO Access class Rel 4 (ver 1.00.100)

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


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

 ファイルの使用はVC++のサンプルソースと共にLHA形式でアーカイブされ含まれていますので、ダウンロード 後展開してください。

使用法

・メインとなる部分はR3までとおなじためそちらを参照してください。
・今回の更新ではCDaoWorkspaceを参照するCDaoDatabaseクラスへの変更および
 パスワードセキュリティアクセスの強化を行いました。
・CDAODBクラスについてはほぼ各行に説明を付け足しました。

 パスワードのデータベースへの登録はマイクロソフトアクセスで排他モードでオープンすれば行えます。また、暗号化データベースの作成もアクセスで行えます。
 パスワードプロテクトを行ったデータベースへのアクセスは、以下のようにして簡単に行えます。緑の部分がR1で公開したソース部分からの追加です。また、ファイルのオープンに新規作成部分は削除しました。
 このように、パスワードプロテクトをかけたデータベースファイルのオープンは設定したパスワードを文字列としてファイルを開くまえに定義することで行えます。

#include "cdaodb.h"

int CJETDB1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;
    // TODO: この位置に固有の作成用コードを追加してください
    CDAODB dbg;

   dbg.SetOpenPassword("hogehoge"); // データベースファイルに指定したパスワードを定義するかユーザー入力により受け付ける。

    if( dbg.Open("MyDatabase.mdb") == FALSE ) return -1;
        dbg.CreateTable("Default");      // new DataBase
        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
// Revision 1.30.100

#ifndef __CDAODB_CLASS__

#define __CDAODB_CLASS__

#include <afxdao.h>

class CDAODB ;


VOID CompactDAODB(void);

class CDAODBCash : public CObject {
        typedef struct {
            char         data[40];
            char         data1[40];
            char         data2[20];
        }CashTree,*LPCashTree;
    public:
        long nMaxCount; // max cash buffers
        long nCount;
    public :
        CashTree *root;
        long sCount;
        CDAODBCash();
        virtual ~CDAODBCash();
    public : // 継承Function
        int         StrCmpLen    (LPSTR src1,LPSTR src2);    // String Function
        //     先頭から一致する長さを返す
        int         StrCmpLenEx    (LPSTR src1,LPSTR src2);    // String Function
        //     途中も含めて一致する最大文字数を返す
        int         StrCmpStartEx(LPSTR src1,LPSTR src2);
        //     途中も含めて一致する最大文字数の位置を返す
        int         GetCount    (void);
        int         GetMaxCount    (void);

    public:    // tree control
        void    Push     (LPSTR s,LPSTR d,LPSTR d2 = ""); // s,d(d2)の値を登録する
        void    PushNE     (LPSTR s,LPSTR d,LPSTR d2 = ""); // s の値で2重登録を検査する
        void    PushNE1     (LPSTR s,LPSTR d,LPSTR d2 = ""); // d の値で2重登録を検査する
        void    PushNE2     (LPSTR s,LPSTR d,LPSTR d2 = ""); // d2 の値で2重登録を検査する
        LPSTR    GetStr     (int n);
        LPSTR    GetStr1     (int n);
        LPSTR    GetStr2     (int n);
        void    SetStr     (int n,LPSTR p);
        void    SetStr1     (int n,LPSTR p);
        void    SetStr2     (int n,LPSTR p);
        void SortOneBegin(void);
        BOOL    SortOne         (void);
        BOOL    SortOne1     (void);
        BOOL    SortOne2     (void);
        long    Search     (LPSTR szText);
        BOOL    Create         (int nMaxCount);    // Create and Initialize
        BOOL    Load         (LPSTR filename);    // Status Load
        BOOL    Save         (LPSTR filename);    // Status Save
    private :
        long StructSize(void);
};
//----------------------------------------------
class CDAODBCash2 : public CDAODBCash {
    public:
            typedef struct {
            char         data[10];
            char         data1[40];
        }CashTree2,*LPCashTree2;
    private:
//        long nMaxCount; // max cash buffers
//        long nCount;
    public :
        CashTree2 *root;
        long sCount;
        CDAODBCash2();
        virtual ~CDAODBCash2();
    public:    // tree control
        void    Push     (LPSTR s,LPSTR d);
        void    Push2     (LPSTR s,LPSTR d);
        void    PushNE     (LPSTR s,LPSTR d);
        void    PushNE1     (LPSTR s,LPSTR d);
        LPSTR    GetStr     (int n);
        LPSTR    GetStr1     (int n);
        void    SetStr     (int n,LPSTR p);
        void    SetStr1     (int n,LPSTR p);
        void SortOneBegin(void);
        BOOL    SortOne         (void);
        BOOL    SortOne1     (void);
        long    Search         (LPSTR szText);

//        int         GetCount(void);
//        int         GetMaxCount(void);
        BOOL    Create         (int nMaxCount);    // Create and Initialize
        BOOL    Load         (LPSTR filename);    // Status Load
        BOOL    Save         (LPSTR filename);    // Status Save
    private :
        long StructSize(void);
};
//----------------------------------------------
class CDAODBCash3 : public CDAODBCash {
    public:
            typedef struct {
            char         data[10];
            char         data1[10];
        }CashTree2,*LPCashTree2;
    private:
//        long nMaxCount; // max cash buffers
//        long nCount;
    public :
        CashTree2 *root;
        long sCount;
        CDAODBCash3();
        virtual ~CDAODBCash3();
    public:    // tree control
        void    Push         (LPSTR s,LPSTR d);
        void    PushNE         (LPSTR s,LPSTR d);
        void    PushNE1         (LPSTR s,LPSTR d);
        LPSTR    GetStr         (int n);
        LPSTR    GetStr1         (int n);
        void    SetStr     (int n,LPSTR p);
        void    SetStr1     (int n,LPSTR p);
        void SortOneBegin(void);
        BOOL    SortOne         (void);
        BOOL    SortOne1     (void);
        long    Search         (LPSTR szText);

//        int         GetCount(void);
//        int         GetMaxCount(void);
        BOOL    Create         (int nMaxCount);    // Create and Initialize
        BOOL    Load         (LPSTR filename);    // Status Load
        BOOL    Save         (LPSTR filename);    // Status Save
    private :
        long StructSize(void);
};
//----------------------------------------------
class CDAODB : public CObject
{
    public : // other function
        void ZipSJis2Asc    (LPSTR srcdest); // 全角郵便番号を半角へ、半角入力OK、7桁の場合ハイフン挿入
        void SujiSJis2Asc    (LPSTR srcdest); // 全角数字(ハイフン)を半角へ、半角入力OK
        void ZipSJis2Asc    (LPSTR src,LPSTR dest); // 全角郵便番号を半角へ、半角入力OK、7桁の場合ハイフン挿入
        void SujiSJis2Asc    (LPSTR src,LPSTR dest); // 全角数字(ハイフン)を半角へ、半角入力OK

        // 平仮名全角−>片仮名半角
        void Hirakana2Hankaku(LPSTR srcdest);
        void Hirakana2Hankaku(LPSTR src,LPSTR dest);

        // ALL Hankaku
        void AllHankaku(LPSTR srcdest);
        void AllHankaku(LPSTR src,LPSTR dest);

    private : // CDaoDatabase Object
        CDaoWorkspace *m_ws;
        CDaoDatabase *m_cdao;
        CDaoTableDef *m_tbl;
        CDaoRecordset *m_rs;
        char szOrgFileName[_MAX_PATH];
        char szPassword[_MAX_PATH];
    private : //
        BOOL bAppend;    // Field Create and need append function flg
    public : // constructor / destructor
        CDAODB();
        ~CDAODB();

    public : // Workspace Function (CDaoWorkspace)
        void CreateWorkspace    (void);
        BOOL CreateWS    (LPCTSTR lpszName = "", LPCTSTR lpszUserName = "", LPCTSTR lpszPassword = "");    // CDaoWorkspaceを作成します
        BOOL OpenWS         (LPCTSTR lpszName = NULL );     // CDaoWorkspaceを開きます
        void CloseWS    (void);     //    CDaoWorkspaceを終了します
        BOOL SetDefaultPassword( LPCTSTR lpszPassword);

    public : // commondlg32 file
        LPSTR File2Load( CWnd *lpcWnd );     // 読み込み用ファイルの指定をコモンダイアログを使用して修得する
        LPSTR File2Save( CWnd *lpcWnd );     // 書き込み用ファイルの指定をコモンダイアログを使用して修得する
        LPSTR File2Load( HWND hWnd );         // 読み込み用ファイルの指定をコモンダイアログを使用して修得する
        LPSTR File2Save( HWND hWnd );         // 書き込み用ファイルの指定をコモンダイアログを使用して修得する
    public : // Macro function
        long Search    (int     nFieldIndex ,LPCSTR szData);    // 現在オープンしているレコードセット内のデータを検索する
        long Search    (LPCSTR     szFieldIndex,LPCSTR szData);    // 現在オープンしているレコードセット内のデータを検索する
        long SearchI(int    nFieldIndex ,LPCSTR szData);    // 現在オープンしているレコードセット内のデータを検索する
        long SearchI(LPCSTR     szFieldIndex,LPCSTR szData);    // 現在オープンしているレコードセット内のデータを検索する
        long GetCurrentRecords     (void);
        BOOL CkUpdateField         (LPSTR szFieldName,COleVariant c); // フィールドがアップデート可能かどうか調べる

    public : // CDaoDataBase
        void SetOpenPassword(LPCTSTR lpszPassword); // ファイルを開く時のパスワードを設定する
        BOOL Create    (LPCSTR filename, LPCTSTR lpszLocale = dbLangGeneral, int dwOptions = 0 );    // データベースファイルを作成する
        BOOL Open    ( LPCTSTR lpszName, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = _T("") );     // データベースファイルを開く
        BOOL Open    ( LPCTSTR lpszName, LPCTSTR lpszConnect,BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE );     // データベースファイルを開く
        BOOL ReOpen    ( BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = _T("") );     // いったん終了し再度同一ファイルをオープンしなおす
        void Close    (void);     // データベースの使用を終了する
        CDaoTableDef*     GetTable(void){return m_tbl;};    // 現在使用しているDAOテーブルクラスのポインターを返す
        CDaoRecordset*     GetRecord(void){return m_rs;};    // 現在使用しているDAOレコードセットクラスのポインターを返す
        CString         GetVersion(void);    // Jet Database Engine のバージョンを修得(3.5の場合は 3.0になる)
    //------------------------------------------
        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 IsTableDef         (LPSTR szTableName);    // 指定名がテーブル名かどうか検査する
    //------------------------------------------
        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); // String型フィールドを作成
        BOOL CreateFieldDate    (LPSTR lpszName,long lAttributes = dbFixedField);    // Date型フィールドを作成
        BOOL CreateFieldCurrency(LPSTR lpszName,long lAttributes = dbFixedField);    // Currency型フィールドを作成
        BOOL CreateFieldBool    (LPSTR lpszName,long lAttributes = dbFixedField);    // Bool型フィールドを作成
        BOOL CreateFieldByte    (LPSTR lpszName,long lAttributes = dbFixedField);    // Byte型フィールドを作成
        BOOL CreateFieldInt         (LPSTR lpszName,long lAttributes = dbFixedField);    // Int型フィールドを作成
        BOOL CreateFieldLong    (LPSTR lpszName,long lAttributes = dbFixedField);    // Long型フィールドを作成
        BOOL CreateFieldSingle    (LPSTR lpszName,long lAttributes = dbFixedField);    // Single型フィールドを作成
        BOOL CreateFieldDouble    (LPSTR lpszName,long lAttributes = dbFixedField);    // Double型フィールドを作成
        BOOL CreateFieldLB         (LPSTR lpszName,long lAttributes = dbFixedField);
        BOOL CreateFieldMemo    (LPSTR lpszName,long lAttributes = dbFixedField);    // メモ型フィールドを作成
        short FieldCount(void);         // フィールド数を修得
        BOOL FieldInfo( int nIndex, CDaoFieldInfo& fieldinfo, DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO ); // フィールドの情報を修得
        BOOL FieldInfo( LPCTSTR lpszName, CDaoFieldInfo& fieldinfo, DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO ); // フィールドの情報を修得
        BOOL IsFieldName(LPSTR szFieldName);     //     フィールドに指定の名前が存在するかどうかチェック

        // create index
        BOOL CreateIndex( CDaoIndexInfo& indexinfo );    // インデックス作成
        BOOL DeleteIndex( LPCTSTR lpszName);             // インデックス消去
        BOOL DeleteIndex( int index);                     // インデックス消去
        BOOL CanUpdateTbl(void);                         // テーブルが更新可能かどうかチェック

        BOOL GetIndexInfo( int nIndex, CDaoIndexInfo& indexinfo, DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO );     // インデックス情報を修得
        BOOL GetIndexInfo( LPCTSTR lpszName, CDaoIndexInfo& indexinfo, DWORD dwInfoOptions = AFX_DAO_PRIMARY_INFO );     // インデックス情報を修得


    //------------------------------------------
    // CDaoRecordset
        BOOL OpenRecord(int nOpenType = dbOpenDynaset, int nOptions = 0);
        BOOL CloseRecord(void);
        BOOL AddNew         (void); // pare w/Update function
        BOOL AddNew         (CWnd *lpcWnd); // 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);
        BOOL Edit         (CWnd *lpcWnd); // ページロックできない時に再施行します。またユーザーに問い合わせも行います
        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);
        LPSTR    GetStr         (LPCSTR lpszName);
        LPSTR    GetStr         (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);    // レコードをNULLに設定する
        BOOL SetNull    (int nOrdinal);         // レコードをNULLに設定する

        BOOL SetToday    (LPCTSTR lpszName);    // レコードに現在時間を設定する
        BOOL SetToday    (int nOrdinal);         // レコードに現在時間を設定する
        BOOL SetDate    (int nOrdinal     ,int nY,int nM,int nD);        // レコードに指定日設定する
        BOOL SetDate    (LPCTSTR lpszName,int nY,int nM,int nD);    // レコードに指定日設定する
        BOOL SetDateOffset    (int nOrdinal    ,int nY,int nM,int nD);    // レコードに指定日設定する
        BOOL SetDateOffset    (LPCTSTR lpszName,int nY,int nM,int nD);    // レコードに指定日設定する

        // 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);     // フィールドの情報を修得する
        //


};
#endif // __CDAODB_CLASS__
// EOF
//-------------------------------------------

Copyright (C) Kitaro 1998