最終更新日: 1998年 10月 20日 火曜日
ダウンロードはこちら です
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