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