最終更新日: 1998年 12月 14日 月曜日
MFC・CDaoDatabaseオブジェクトを利用すると簡単にDataBaseが利用可能です。
ファイルの使用はVC++のサンプルソースと共にLHA形式でアーカイブされ含まれていますので、ダウンロード 後展開してください。
使用法など拡張された機能について
・メインとなる部分はR4までとおなじためそちらを参照してください。
・リリース版のパフォーマンス向上のために、デバッグ用チェックコードの一部をASSERT分に変更しました。
・CDAOCash4クラスを拡張しました。
・同一タイプの複数のフィールドを一括して作成する関数の追加
//-------------------------------------------
// DAO Database access class for MFC CDaoXXX
// Programmed & Copyright (c) by kitaro 1998
// Revision 1.60.102
#ifndef __CDAODB_CLASS__
#define __CDAODB_CLASS__
#include <afxdao.h>
#include "CStrObj.h"
class CDAODB ;
VOID CompactDAODB(void);
class CDAODBCash : public CStrObj {// 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();
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
(long n);
LPSTR GetStr1
(long n);
LPSTR GetStr2
(long n);
void SetStr
(long n,LPSTR p);
void SetStr1
(long n,LPSTR p);
void SetStr2
(long n,LPSTR p);
void SortOneBegin(void);
BOOL SortOne
(void);
BOOL SortOne1
(void);
BOOL SortOne2
(void);
long Search
(LPSTR szText);
BOOL Create
(long 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;
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
(long n);
LPSTR GetStr1
(long n);
void SetStr
(long n,LPSTR p);
void SetStr1
(long n,LPSTR p);
void SortOneBegin(void);
BOOL SortOne
(void);
BOOL SortOne1
(void);
long Search
(LPSTR szText);
BOOL Create
(long 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;
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
(long n);
LPSTR GetStr1
(long n);
void SetStr
(long n,LPSTR p);
void SetStr1
(long n,LPSTR p);
void SortOneBegin(void);
BOOL SortOne
(void);
BOOL SortOne1
(void);
long Search
(LPSTR szText);
BOOL Create
(long nMaxCount); // Create
and Initialize
BOOL Load
(LPSTR filename); // Status
Load
BOOL Save
(LPSTR filename); // Status
Save
private :
long StructSize(void);
};
//----------------------------------------------
class CDAODBCash4 : public CDAODBCash {
public:
typedef struct {
char
data[10];
char
data1[128];
}CashTree2,*LPCashTree2;
public :
CashTree2 *root;
long sCount;
CDAODBCash4();
virtual ~CDAODBCash4();
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
(long n);
LPSTR GetStr1
(long n);
void SetStr
(long n,LPSTR p);
void SetStr1
(long n,LPSTR p);
void SortOneBegin(void);
BOOL SortOne
(void);
BOOL SortOne1
(void);
long Search
(LPSTR szText);
BOOL Create
(long nMaxCount); // Create
and Initialize
BOOL Load
(LPSTR filename); // Status
Load
BOOL Save
(LPSTR filename); // Status
Save
private :
long StructSize(void);
};
//----------------------------------------------
class CDAODB : public CStrObj //CObject
{
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);
BOOL SetDefaultPassword( long dwPassword);
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 Search (int
nFieldIndex ,int nFieldIndex2,LPCSTR szData,LPCSTR
szData2); //
現在オープンしているレコードセット内のデータを検索する
long Search (LPCSTR
szFieldIndex,LPCSTR szFieldIndex2,LPCSTR
szData,LPCSTR szData2); //
現在オープンしているレコードセット内のデータを検索する
long SearchI(int nFieldIndex
,int nFieldIndex2,LPCSTR szData,LPCSTR szData2); //
現在オープンしているレコードセット内のデータを検索する
long SearchI(LPCSTR
szFieldIndex,LPCSTR szFieldIndex2,LPCSTR
szData,LPCSTR szData2); //
現在オープンしているレコードセット内のデータを検索する
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 CreateFieldStr
(int count,...); // 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 CreateFieldInt
(int count,...); // int
型フィールドを指定個数標準型で作成
BOOL CreateFieldLong (LPSTR
lpszName,long lAttributes = dbFixedField); // Long型フィールドを作成
BOOL CreateFieldLong (int
count,...); // long 型フィールドを指定個数標準型で作成
BOOL CreateFieldSingle (LPSTR
lpszName,long lAttributes = dbFixedField); // Single型フィールドを作成
BOOL CreateFieldSingle (int
count,...); // single 型フィールドを指定個数標準型で作成
BOOL CreateFieldDouble (LPSTR
lpszName,long lAttributes = dbFixedField); // Double型フィールドを作成
BOOL CreateFieldDouble (int
count,...); // 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);
//
フィールドに指定の名前が存在するかどうかチェック
LPCTSTR GetFieldName(int
nIndex);
// 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
//-------------------------------------------
//-------------------------------------------
// DAO Database access class for MFC CDaoXXX
// programmed Copyright (c) by kitaro 1998
// Cash program for DAODB class
//
#include "CDAODB.h"
VOID CompactDAODB(void){
CDaoWorkspace cw;
cw.Open(NULL);
cw.CompactDatabase ("ZipCode.mdb",
"temp.mdb");
cw.Close();
}
//--------------------------------------
// CDAODB Memory Cash class
BOOL CDAODBCash::Save(LPSTR filename){
CFile cf;
if( cf.Open(filename,CFile::modeCreate | CFile::modeWrite ) == FALSE)
return FALSE;
cf.Write(&nCount,sizeof(nCount));
cf.Write( root,StructSize()*nCount );
cf.Close();
return TRUE;
};
BOOL CDAODBCash::Load(LPSTR filename){
CFile cf;
int n;
if( cf.Open(filename,CFile::modeRead)== FALSE) return FALSE;
cf.Read(&n,sizeof(n)); nMaxCount = n;
if(root != NULL) free(root); root=NULL;
Create(n); nCount = n;
cf.Read( root,StructSize()*nCount );
cf.Close();
return TRUE;
};
BOOL CDAODBCash::Create(long n){
nMaxCount = n;
root = (CashTree*)malloc (StructSize()*nMaxCount) ;
if(root == NULL){
::MessageBox(NULL,"メモリー不足です","ERROR",MB_OK);
}
ZeroMemory(root,StructSize()*nMaxCount );
nCount = 0;
return TRUE;
};
CDAODBCash::CDAODBCash(){ root = NULL;};
CDAODBCash::~CDAODBCash(){
if( root != NULL) free( root); root=NULL;
};
void CDAODBCash::PushNE(LPSTR s,LPSTR d,LPSTR d2){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data,s)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
strcpy(root[nCount].data2,d2);
nCount++;
};
void CDAODBCash::PushNE1(LPSTR s,LPSTR d,LPSTR d2){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data1,d)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
strcpy(root[nCount].data2,d2);
nCount++;
};
void CDAODBCash::PushNE2(LPSTR s,LPSTR d,LPSTR d2){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data2,d2)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
strcpy(root[nCount].data2,d2);
nCount++;
};
void CDAODBCash::Push(LPSTR s,LPSTR d,LPSTR d2){
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
strcpy(root[nCount].data2,d2);
nCount++;
};
long CDAODBCash::Search (LPSTR szText){
long i;
for(i=0;i<nCount;i++){
if( strcmp(root[i].data ,szText)==0) return
(i);
}return -1;
};
int CDAODBCash::GetCount
(void) {return nCount;};
int CDAODBCash::GetMaxCount
(void) {return nMaxCount;};
LPSTR CDAODBCash::GetStr (long
n){return root[n].data;};
LPSTR CDAODBCash::GetStr1
(long n){return root[n].data1;};
LPSTR CDAODBCash::GetStr2
(long n){return root[n].data2;};
void CDAODBCash::SetStr (long
n,LPSTR p){strcpy( root[n].data ,p);};
void CDAODBCash::SetStr1 (long
n,LPSTR p){strcpy( root[n].data1,p);};
void CDAODBCash::SetStr2 (long
n,LPSTR p){strcpy( root[n].data2,p);};
long CDAODBCash::StructSize (void)
{return(sizeof(CashTree));};
void CDAODBCash::SortOneBegin(void){
sCount=0;
};
BOOL CDAODBCash::SortOne(void){
BOOL bx;
int j,k;
static CashTree *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data,a->data)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
BOOL CDAODBCash::SortOne1(void){
BOOL bx;
int j,k;
static CashTree *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data1,a->data1)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
BOOL CDAODBCash::SortOne2(void){
BOOL bx;
int j,k;
static CashTree *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data2,a->data2)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
//--------------------------------------
// CDAODB Memory Cash class Cache2
BOOL CDAODBCash2::Save(LPSTR filename){
CFile cf;
if( cf.Open(filename,CFile::modeCreate | CFile::modeWrite
)==FALSE)return FALSE;
cf.Write(&nCount,sizeof(nCount));
cf.Write( root,StructSize()*nCount );
cf.Close();
return TRUE;
};
BOOL CDAODBCash2::Load(LPSTR filename){
CFile cf;
int n;
if( cf.Open(filename,CFile::modeRead)==FALSE)return FALSE;
cf.Read(&n,sizeof(n)); nMaxCount = n;
if(root != NULL) free(root); root=NULL;
Create(n); nCount = n;
cf.Read( root,StructSize()*nCount );
cf.Close();
return TRUE;
};
BOOL CDAODBCash2::Create(long n){
nMaxCount = n;
root = (CashTree2*)malloc (StructSize()*nMaxCount) ;
if(root == NULL){
::MessageBox(NULL,"メモリー不足です","ERROR",MB_OK);
}
ZeroMemory(root,StructSize()*nMaxCount );
nCount = 0;
return TRUE;
};
CDAODBCash2::CDAODBCash2(){
root = NULL;
};
CDAODBCash2::~CDAODBCash2(){
if( root != NULL) free( root); root=NULL;
};
void CDAODBCash2::PushNE(LPSTR s,LPSTR d){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data,s)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
void CDAODBCash2::PushNE1(LPSTR s,LPSTR d){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data1,d)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
void CDAODBCash2::Push(LPSTR s,LPSTR d){
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
long CDAODBCash2::Search (LPSTR szText){
long i;
for(i=0;i<nCount;i++){
if( strcmp(root[i].data ,szText)==0) return
(i);
}return -1;
};
LPSTR CDAODBCash2::GetStr
(long n){return root[n].data;};
LPSTR CDAODBCash2::GetStr1 (long n){return
root[n].data1;};
void CDAODBCash2::SetStr (long
n,LPSTR p){strcpy( root[n].data ,p);};
void CDAODBCash2::SetStr1 (long n,LPSTR p){strcpy(
root[n].data1,p);};
long CDAODBCash2::StructSize
(void){return(sizeof(CashTree2));};
void CDAODBCash2::SortOneBegin(void){
sCount=0;
};
BOOL CDAODBCash2::SortOne(void){
BOOL bx;
int j,k;
static CashTree2 *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data,a->data)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
BOOL CDAODBCash2::SortOne1(void){
BOOL bx;
int j,k;
static CashTree2 *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data1,a->data1)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
//--------------------------------------
// CDAODB Memory Cash class 3
CDAODBCash3::Save(LPSTR filename){
CFile cf;
if(cf.Open(filename,CFile::modeCreate | CFile::modeWrite
)==FALSE)return FALSE;
cf.Write(&nCount,sizeof(nCount));
cf.Write( root,StructSize()*nCount );
cf.Close();
return TRUE;
};
CDAODBCash3::Load(LPSTR filename){
CFile cf;
int n;
if( cf.Open(filename,CFile::modeRead)==FALSE)return FALSE;
cf.Read(&n,sizeof(n)); nMaxCount = n;
if(root != NULL) free(root); root=NULL;
Create(n); nCount = n;
cf.Read( root,StructSize()*nCount );
cf.Close();
return TRUE;
};
BOOL CDAODBCash3::Create(long n){
nMaxCount = n;
root = (CashTree2*)malloc (StructSize()*nMaxCount) ;
if(root == NULL){
::MessageBox(NULL,"メモリー不足です","ERROR",MB_OK);
}
ZeroMemory(root,StructSize()*nMaxCount );
nCount = 0;
return TRUE;
};
CDAODBCash3::CDAODBCash3(){
root = NULL;
};
CDAODBCash3::~CDAODBCash3(){
if( root != NULL) free( root); root=NULL;
};
void CDAODBCash3::PushNE(LPSTR s,LPSTR d){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data,s)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
void CDAODBCash3::PushNE1(LPSTR s,LPSTR d){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data1,d)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
void CDAODBCash3::Push(LPSTR s,LPSTR d){
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
long CDAODBCash3::Search (LPSTR szText){
long i;
for(i=0;i<nCount;i++){
if( strcmp(root[i].data ,szText)==0) return
(i);
}return -1;
};
LPSTR CDAODBCash3::GetStr
(long n){return root[n].data;};
LPSTR CDAODBCash3::GetStr1 (long n){return
root[n].data1;};
void CDAODBCash3::SetStr (long
n,LPSTR p){strcpy( root[n].data ,p);};
void CDAODBCash3::SetStr1 (long n,LPSTR p){strcpy(
root[n].data1,p);};
long CDAODBCash3::StructSize
(void){return(sizeof(CashTree2));};
void CDAODBCash3::SortOneBegin(void){
sCount=0;
};
BOOL CDAODBCash3::SortOne(void){
BOOL bx;
int j,k;
static CashTree2 *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data,a->data)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
BOOL CDAODBCash3::SortOne1(void){
BOOL bx;
int j,k;
static CashTree2 *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data1,a->data1)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
//--------------------------------------
// CDAODB Memory Cash class Cache4
BOOL CDAODBCash4::Save(LPSTR filename){
CFile cf;
if( cf.Open(filename,CFile::modeCreate | CFile::modeWrite
)==FALSE)return FALSE;
cf.Write(&nCount,sizeof(nCount));
cf.Write( root,StructSize()*nCount );
cf.Close();
return TRUE;
};
BOOL CDAODBCash4::Load(LPSTR filename){
CFile cf;
int n;
if( cf.Open(filename,CFile::modeRead)==FALSE)return FALSE;
cf.Read(&n,sizeof(n)); nMaxCount = n;
if(root != NULL) free(root); root=NULL;
Create(n); nCount = n;
cf.Read( root,StructSize()*nCount );
cf.Close();
return TRUE;
};
BOOL CDAODBCash4::Create(long n){
nMaxCount = n;
root = (CashTree2*)malloc (StructSize()*nMaxCount) ;
if(root == NULL){
::MessageBox(NULL,"メモリー不足です","ERROR",MB_OK);
}
ZeroMemory(root,StructSize()*nMaxCount );
nCount = 0;
return TRUE;
};
CDAODBCash4::CDAODBCash4(){
root = NULL;
};
CDAODBCash4::~CDAODBCash4(){
if( root != NULL) free( root); root=NULL;
};
void CDAODBCash4::PushNE(LPSTR s,LPSTR d){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data,s)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
void CDAODBCash4::PushNE1(LPSTR s,LPSTR d){
int i;
for(i=0;i<nCount;i++){
if(strcmp(root[i].data1,d)==0) return;
}
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
void CDAODBCash4::Push(LPSTR s,LPSTR d){
if(nCount >= nMaxCount)return;
strcpy(root[nCount].data ,s);
strcpy(root[nCount].data1,d);
nCount++;
};
long CDAODBCash4::Search (LPSTR szText){
long i;
for(i=0;i<nCount;i++){
if( strcmp(root[i].data ,szText)==0) return
(i);
}return -1;
};
LPSTR CDAODBCash4::GetStr
(long n){return root[n].data;};
LPSTR CDAODBCash4::GetStr1 (long n){return
root[n].data1;};
void CDAODBCash4::SetStr (long
n,LPSTR p){strcpy( root[n].data ,p);};
void CDAODBCash4::SetStr1 (long n,LPSTR p){strcpy(
root[n].data1,p);};
long CDAODBCash4::StructSize
(void){return(sizeof(CashTree2));};
void CDAODBCash4::SortOneBegin(void){
sCount=0;
};
BOOL CDAODBCash4::SortOne(void){
BOOL bx;
int j,k;
static CashTree2 *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data,a->data)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
BOOL CDAODBCash4::SortOne1(void){
BOOL bx;
int j,k;
static CashTree2 *a,*top,px;
{
bx = TRUE;
a = root + sCount;
j = sCount;
k = nCount;
top = a;
_asm{
mov eax,k
mov ebx,j
sub eax,ebx
mov ecx,eax
loop1:
push ecx
}
{
if(strcmp(top->data1,a->data1)>0)
top=a;
a++;
}
_asm{
pop ecx
loop loop1
}
memcpy(&px,&root [ sCount
],sizeof(CashTree));
memcpy(&root [ sCount
],top,sizeof(CashTree));
memcpy(top,&px,sizeof(CashTree));
sCount++;
return bx;
}
};
//-------------------------------------------
//
CDAODB::CDAODB(){
strcpy(szPassword,"");
m_ws = NULL;
m_cdao = NULL;
m_tbl = NULL;
m_rs = NULL;
bAppend = FALSE;
};
CDAODB::~CDAODB(){
Close();
};
//-------------------------------------------
void CDAODB::Close(void){
//
if(m_ws !=NULL){CloseWS();}
if(m_rs !=NULL){m_rs
->Close(); delete(m_rs); } // delete recordset object
if(m_tbl !=NULL){m_tbl ->Close(); delete(m_tbl); }
// delete table object
if(m_cdao !=NULL){m_cdao->Close(); delete(m_cdao);
}
m_cdao = NULL;
m_tbl = NULL;
m_rs = NULL;
};
BOOL CDAODB::GetTableDefInfo( int nIndex, CDaoTableDefInfo& tabledefinfo, DWORD
dwInfoOptions ){
ASSERT(m_cdao);
try{
m_cdao->GetTableDefInfo(nIndex,
tabledefinfo, dwInfoOptions );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::GetTableDefInfo( LPCTSTR lpszName, CDaoTableDefInfo& tabledefinfo, DWORD
dwInfoOptions ){
ASSERT(m_cdao);
try{
m_cdao->GetTableDefInfo(lpszName,
tabledefinfo, dwInfoOptions );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
short CDAODB::GetTableDefCount( void ){
ASSERT(m_cdao);
short n;
try{
n = m_cdao->GetTableDefCount();
}
catch(CDaoException* e) {
e->Delete(); return -1; }
catch(CMemoryException* e) { e->Delete(); return
-1; }
return n;
};
BOOL CDAODB::IsTableDef(LPSTR szTableName){
short i,n;
CDaoTableDefInfo tabledefinfo;
n = GetTableDefCount();
for(i=0;i<n;i++){
GetTableDefInfo(i,tabledefinfo);
if(strcmp(szTableName,LPCTSTR(
tabledefinfo.m_strName) )==0) break;
}
if(i==n)return FALSE;
return TRUE;
};
BOOL CDAODB::GetIndexInfo( int nIndex, CDaoIndexInfo& indexinfo, DWORD dwInfoOptions
){
ASSERT(m_tbl);
try{
m_tbl->GetIndexInfo( nIndex, indexinfo,
dwInfoOptions );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::GetIndexInfo( LPCTSTR lpszName, CDaoIndexInfo& indexinfo, DWORD
dwInfoOptions ){
ASSERT(m_tbl);
try{
m_tbl->GetIndexInfo( lpszName, indexinfo,
dwInfoOptions );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::CanUpdateTbl( void){
ASSERT(m_tbl);
try{
return(m_tbl->CanUpdate());
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::DeleteIndex( int nIndex){
ASSERT(m_tbl);
try{
if(CanUpdateTbl()==TRUE)
m_tbl->DeleteIndex(
nIndex );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::DeleteIndex( LPCTSTR lpszName){
ASSERT(m_tbl);
try{
if(CanUpdateTbl()==TRUE)
m_tbl->DeleteIndex(
lpszName );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::CreateTable(LPCSTR szTableName){
ASSERT(m_tbl);
try{
CloseTable();
m_tbl->Create( szTableName );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::OpenTable(LPCSTR szTableName){
ASSERT(m_tbl);
try{
CloseTable();
m_tbl->Open( szTableName );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::CloseTable(void){
ASSERT(m_tbl);
try{
if(bAppend == TRUE)m_tbl->Append(); bAppend
= FALSE;
if(m_tbl->IsOpen()==TRUE)
m_tbl->Close();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::DeleteTableDef( LPCTSTR lpszName ){
ASSERT(m_cdao);
try{
m_cdao->DeleteTableDef( lpszName );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
//----------------------------------------------------------------------------
// Create Index Function
BOOL CDAODB::CreateIndex( CDaoIndexInfo& indexinfo ){
ASSERT(m_tbl);
try{
m_tbl->CreateIndex( indexinfo );
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
//----------------------------------------------------------------------------
// Table Field object
BOOL CDAODB::FieldInfo( int nIndex, CDaoFieldInfo& fieldinfo, DWORD dwInfoOptions ){
ASSERT(m_tbl);
try{
m_tbl->GetFieldInfo(nIndex,fieldinfo,dwInfoOptions
);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::FieldInfo( LPCTSTR lpszName, CDaoFieldInfo& fieldinfo, DWORD
dwInfoOptions ){
ASSERT(m_tbl);
try{
m_tbl->GetFieldInfo(lpszName,fieldinfo,dwInfoOptions
);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
short CDAODB::FieldCount( void ){
ASSERT(m_tbl);
try{
return(m_tbl->GetFieldCount());
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return FALSE;
};
LPCTSTR CDAODB::GetFieldName(int nIndex){
static CDaoFieldInfo fieldinfo;
if( FieldInfo( nIndex, fieldinfo)== FALSE) return NULL;
return LPCTSTR(fieldinfo.m_strName);
}
BOOL CDAODB::IsFieldName(LPSTR szFieldName){
short i,n;
CDaoFieldInfo fieldinfo;
n = FieldCount();
for(i=0;i<n;i++){
if( FieldInfo( i, fieldinfo)== FALSE) return
FALSE;
if(strcmp(szFieldName,LPCTSTR(fieldinfo.m_strName))==0)break;
}
if(i==n)return FALSE;
return TRUE;
};
BOOL CDAODB::AppendField( void ){
ASSERT(m_tbl);
try{
if(bAppend == TRUE)m_tbl->Append(); bAppend
= FALSE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateField(LPSTR lpszName,short nType , long lSize , long lAttributes ){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,nType,lSize,lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
//---------------------------------------------------------------------
BOOL CDAODB::CreateFieldStr (int count,...){
BOOL b=FALSE;
va_list argList;
va_start(argList, count);
int i;
for(i=0;i<count;i++){
LPSTR p;
p = va_arg(argList, LPSTR );
b = CreateFieldStr(p);
if(b==FALSE)break;
}
va_end(argList);
return b;
};
BOOL CDAODB::CreateFieldInt (int count,...){
BOOL b=FALSE;
va_list argList;
va_start(argList, count);
int i;
for(i=0;i<count;i++){
LPSTR p;
p = va_arg(argList, LPSTR );
b = CreateFieldInt(p);
if(b==FALSE)break;
}
va_end(argList);
return b;
};
BOOL CDAODB::CreateFieldLong (int count,...){
BOOL b=FALSE;
va_list argList;
va_start(argList, count);
int i;
for(i=0;i<count;i++){
LPSTR p;
p = va_arg(argList, LPSTR );
b = CreateFieldLong(p);
if(b==FALSE)break;
}
va_end(argList);
return b;
};
BOOL CDAODB::CreateFieldSingle (int count,...){
BOOL b=FALSE;
va_list argList;
va_start(argList, count);
int i;
for(i=0;i<count;i++){
LPSTR p;
p = va_arg(argList, LPSTR );
b = CreateFieldSingle(p);
if(b==FALSE)break;
}
va_end(argList);
return b;
};
BOOL CDAODB::CreateFieldDouble (int count,...){
BOOL b=FALSE;
va_list argList;
va_start(argList, count);
int i;
for(i=0;i<count;i++){
LPSTR p;
p = va_arg(argList, LPSTR );
b = CreateFieldDouble(p);
if(b==FALSE)break;
}
va_end(argList);
return b;
};
//---------------------------------------------------------------------
BOOL CDAODB::CreateFieldStr(LPSTR lpszName,long lSize,long lAttributes ){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbText,lSize,lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldDate(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbDate,8,dbFixedField | lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldInt(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbInteger,2,dbFixedField | lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldLong(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbLong,4,dbFixedField | lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldSingle(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbSingle,4,dbFixedField | lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldDouble(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbDouble,8,dbFixedField |lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldCurrency(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbCurrency,8,dbFixedField | lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldBool(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbBoolean,1,dbFixedField | lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldByte(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbByte,1,dbFixedField | lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldLB(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbLongBinary,0,lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::CreateFieldMemo(LPSTR lpszName,long lAttributes){
ASSERT(m_tbl);
try{
if(m_tbl->IsOpen()==TRUE) return FALSE;
//table is not open error
m_tbl->CreateField( lpszName
,dbMemo,0,lAttributes);
bAppend = TRUE;
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
//----------------------------------------------------------------------------
BOOL CDAODB::Move(long n){
ASSERT(m_rs);
try{
m_rs->Move(n);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::MoveNext(void){
ASSERT(m_rs);
try{
m_rs->MoveNext();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::MovePrev(void){
ASSERT(m_rs);
try{
m_rs->MovePrev();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::MoveFirst(void){
ASSERT(m_rs);
try{
m_rs->MoveFirst();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::MoveLast(void){
ASSERT(m_rs);
try{
m_rs->MoveLast();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
//-------------------------------------
LPSTR CDAODB::GetStr(LPCSTR lpszName){
static COleVariant c; Get(lpszName,c); if(c.vt==VT_BSTR) return
(LPSTR)c.pbVal;
return NULL;
}
LPSTR CDAODB::GetStr(int nIndex){
static COleVariant c; Get(nIndex,c); if(c.vt==VT_BSTR) return
(LPSTR)c.pbVal;
return NULL;
}
BOOL CDAODB::Get( LPCTSTR lpszName, COleVariant& varValue ){
ASSERT(m_rs);
try{
m_rs->GetFieldValue(lpszName,varValue);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::Get( int nIndex, COleVariant& varValue ){
ASSERT(m_rs);
try{
m_rs->GetFieldValue(nIndex,varValue);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
short CDAODB::GetInt(LPCSTR lpszName){
COleVariant c; Get(lpszName,c); return c.iVal;
}
short CDAODB::GetInt(int nIndex){
COleVariant c; Get(nIndex,c); return c.iVal;
}
long CDAODB::GetLong(LPCSTR lpszName){
COleVariant c; Get(lpszName,c); return c.lVal;
}
long CDAODB::GetLong(int nIndex){
COleVariant c; Get(nIndex,c); return c.lVal;
}
float CDAODB::GetSingle(LPCSTR lpszName){
COleVariant c; Get(lpszName,c); return c.fltVal;
}
float CDAODB::GetSingle(int nIndex){
COleVariant c; Get(nIndex,c); return c.fltVal;
}
double CDAODB::GetDouble(LPCSTR lpszName){
COleVariant c; Get(lpszName,c); return c.dblVal;
}
double CDAODB::GetDouble(int nIndex){
COleVariant c; Get(nIndex,c); return c.dblVal;
}
//-------------------------------------
// SetFieldValue
BOOL CDAODB::SetDateOffset(int nOrdinal,int nY,int nM,int nD){
ASSERT(m_rs);
COleDateTime ct=COleDateTime::GetCurrentTime();
nY = nY + ct.GetYear();
nM = nM + ct.GetMonth();
nD = nD + ct.GetDay();
ct.SetDate(nY,nM,nD);
try{
m_rs->SetFieldValue(nOrdinal,(COleVariant)ct);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::SetDateOffset(LPCTSTR lpszName,int nY,int nM,int nD){
ASSERT(m_rs);
COleDateTime ct=COleDateTime::GetCurrentTime();
nY = nY + ct.GetYear();
nM = nM + ct.GetMonth();
nD = nD + ct.GetDay();
ct.SetDate(nY,nM,nD);
try{
m_rs->SetFieldValue(lpszName,(COleVariant)ct);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::SetDate(LPCTSTR lpszName,int nY,int nM,int nD){
ASSERT(m_rs);
COleDateTime ct=COleDateTime::GetCurrentTime();
ct.SetDate(nY,nM,nD);
try{
m_rs->SetFieldValue(lpszName,(COleVariant)ct);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::SetDate(int nOrdinal,int nY,int nM,int nD){
ASSERT(m_rs);
COleDateTime ct=COleDateTime::GetCurrentTime();
ct.SetDate(nY,nM,nD);
try{
m_rs->SetFieldValue(nOrdinal,(COleVariant)ct);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::SetToday(LPCTSTR lpszName){
ASSERT(m_rs);
try{
m_rs->SetFieldValue(lpszName,(COleVariant)COleDateTime::GetCurrentTime());
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::SetToday(int nOrdinal){
ASSERT(m_rs);
try{
m_rs->SetFieldValue(nOrdinal,(COleVariant)COleDateTime::GetCurrentTime());
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::Set(LPCTSTR lpszName, const COleVariant& varValue){
ASSERT(m_rs);
try{
m_rs->SetFieldValue(lpszName,varValue);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::Set(int nOrdinal, const COleVariant& varValue){
ASSERT(m_rs);
try{
m_rs->SetFieldValue(nOrdinal,varValue);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::Set(LPCTSTR lpszName, LPCTSTR lpszValue){
ASSERT(m_rs);
try{
if
(lpszValue==NULL)
m_rs->SetFieldValueNull(lpszName);
else if
(strlen(lpszValue)==0)
m_rs->SetFieldValueNull(lpszName);
else
m_rs->SetFieldValue(lpszName,lpszValue);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::Set( int nOrdinal, LPCTSTR lpszValue){
ASSERT(m_rs);
try{
if
(lpszValue==NULL)
m_rs->SetFieldValueNull(nOrdinal);
else if
(strlen(lpszValue)==0)
m_rs->SetFieldValueNull(nOrdinal);
else
m_rs->SetFieldValue(nOrdinal,lpszValue);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::Set(LPCTSTR lpszName, long n){
COleVariant c; c=n; return(
Set(lpszName,c) );
}
BOOL CDAODB::Set(int nOrdinal, long n){
COleVariant c; c=n; return(
Set(nOrdinal,c) );
}
BOOL CDAODB::Set(LPCTSTR lpszName, float n){
COleVariant c; c=n; return(
Set(lpszName,c) );
}
BOOL CDAODB::Set(int nOrdinal, float n){
COleVariant c; c=n; return(
Set(nOrdinal,c) );
}
BOOL CDAODB::Set(LPCTSTR lpszName, double n){
COleVariant c; c=n; return(
Set(lpszName,c) );
}
BOOL CDAODB::Set(int nOrdinal, double n){
COleVariant c; c=n; return(
Set(nOrdinal,c) );
}
BOOL CDAODB::Set(LPCTSTR lpszName, short n){
COleVariant c; c=n; return(
Set(lpszName,c) );
}
BOOL CDAODB::Set(int nOrdinal, short n){
COleVariant c; c=n; return(
Set(nOrdinal,c) );
}
BOOL CDAODB::SetNull(LPCTSTR lpszName){
ASSERT(m_rs);
try{
m_rs->SetFieldValueNull(lpszName);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::SetNull( int nOrdinal){
ASSERT(m_rs);
try{
m_rs->SetFieldValueNull(nOrdinal);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
//-------------------------------------
BOOL CDAODB::IsBOF(void){
ASSERT(m_rs);
try{
return m_rs->IsBOF();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::IsEOF(void){
ASSERT(m_rs);
try{
return m_rs->IsEOF();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::IsDeleted(void){
ASSERT(m_rs);
try{
return m_rs->IsDeleted();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::IsOpen(void){
ASSERT(m_rs);
try{
return m_rs->IsOpen();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::GetInfo(int nIndex, CDaoFieldInfo& fieldinfo, DWORD dwInfoOptions ){
ASSERT(m_rs);
try{
m_rs->GetFieldInfo(nIndex,fieldinfo,dwInfoOptions);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::GetInfo(LPCTSTR lpszName, CDaoFieldInfo& fieldinfo, DWORD dwInfoOptions
){
ASSERT(m_rs);
try{
m_rs->GetFieldInfo(lpszName,fieldinfo,dwInfoOptions);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
//-------------------------------------
BOOL CDAODB::Delete(long n){
ASSERT(m_rs);
try{
if(SetPos(n)==FALSE)return FALSE;
m_rs->Delete();
m_rs->MoveFirst();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::Delete(void){
ASSERT(m_rs);
try{
m_rs->Delete();
m_rs->MoveFirst();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
float CDAODB::GetPerPos (void){
ASSERT(m_rs);
float n;
try{
MoveLast(); // access last record before this
function
n = m_rs->GetPercentPosition();
}
catch(CDaoException* e) {
e->Delete(); return -1; }
catch(CMemoryException* e) { e->Delete(); return
-1; }
return n;
}
BOOL CDAODB::SetPos (long lPos){
ASSERT(m_rs);
try{
MoveLast(); // access last record before this
function
m_rs->SetAbsolutePosition(lPos);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
long CDAODB::GetPos(void){
ASSERT(m_rs);
long n;
try{
MoveLast(); // access last record before this
function
n = m_rs->GetAbsolutePosition();
}
catch(CDaoException* e) {
e->Delete(); return -1; }
catch(CMemoryException* e) { e->Delete(); return
-1; }
return n;
}
long CDAODB::GetCount(void){
ASSERT(m_rs);
long n;
try{
if(IsEOF()!=TRUE)
MoveLast(); // access
last record before this function
n = m_rs->GetRecordCount();
}
catch(CDaoException* e) {
e->Delete(); return -1; }
catch(CMemoryException* e) { e->Delete(); return
-1; }
return n;
}
BOOL CDAODB::AddNew(void){
ASSERT(m_rs);
try{
if(m_rs->CanAppend()==FALSE) return FALSE;
m_rs->AddNew();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::CancelUpdate(void){
ASSERT(m_rs);
try{
m_rs->CancelUpdate();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::Update(void){
ASSERT(m_rs);
try{
if(m_rs->CanUpdate()==FALSE) return FALSE;
m_rs->Update();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::OpenRecord(int nOpenType , int nOptions){
ASSERT(m_tbl);
ASSERT(m_rs);
try{
m_rs->Open(m_tbl,nOpenType,nOptions);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
BOOL CDAODB::CloseRecord(void){
ASSERT(m_rs);
try{
m_rs->Close();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
//----------------------------------------------------------------------------
BOOL CDAODB::AddNew (CWnd *lpcWnd){
int n = 0;
long j = 0;
DWORD d1,d2;
SYSTEMTIME st1,st2;
GetSystemTime(&st1);
while( AddNew() != TRUE ){
while(1){
d1 = st1.wSecond;
d1 +=
st1.wMilliseconds;
GetSystemTime(&st2);
d2 = st2.wSecond;
d2 +=
st2.wMilliseconds;
if(d1!=d2)break;
}st1=st2;
j++;
if((j&30)==0){
if(
lpcWnd->MessageBox("現在他のユーザーが書き込みしています\n長時間この状態が続く場合はシステム管理者に連絡してください",
"書き込みタイムアウト",MB_RETRYCANCEL
| MB_ICONEXCLAMATION )==IDCANCEL){
return
FALSE;
}else{
j=0;
GetSystemTime(&st1);
}
}
}
return TRUE;
}
BOOL CDAODB::Edit (CWnd *lpcWnd){
int n = 0;
long j = 0;
DWORD d1,d2;
SYSTEMTIME st1,st2;
GetSystemTime(&st1);
while( Edit() != TRUE ){
while(1){
d1 = st1.wSecond;
d1 +=
st1.wMilliseconds;
GetSystemTime(&st2);
d2 = st2.wSecond;
d2 +=
st2.wMilliseconds;
if(d1!=d2)break;
}st1=st2;
j++;
if((j&30)==0){
if(
lpcWnd->MessageBox("現在他のユーザーが書き込みしています\n長時間この状態が続く場合はシステム管理者に連絡してください",
"書き込みタイムアウト",MB_RETRYCANCEL
| MB_ICONEXCLAMATION )==IDCANCEL){
return
FALSE;
}else{
j=0;
GetSystemTime(&st1);
}
}
}
return TRUE;
}
BOOL CDAODB::Edit(void){
ASSERT(m_rs);
try{
m_rs->Edit();
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
}
//----------------------------------------------------------------------------
COleDateTime CDAODB::GetDateCreated(void){
if(m_rs ==NULL)return COleDateTime::GetCurrentTime();
try{
return ( m_rs->GetDateCreated() );
}
catch(CDaoException* e) {
e->Delete(); return COleDateTime::GetCurrentTime(); }
catch(CMemoryException* e) { e->Delete(); return
COleDateTime::GetCurrentTime(); }
return COleDateTime::GetCurrentTime();
}
COleDateTime CDAODB::GetDateLastUpdated(void){
if(m_rs ==NULL)return COleDateTime::GetCurrentTime();
try{
return ( m_rs->GetDateLastUpdated() );
}
catch(CDaoException* e) {
e->Delete(); COleDateTime::GetCurrentTime(); }
catch(CMemoryException* e) { e->Delete();
COleDateTime::GetCurrentTime(); }
return COleDateTime::GetCurrentTime();
}
//----------------------------------------------------------------------------
CString CDAODB::GetVersion(void){
if(m_cdao==NULL)return CString("NULL");
return(m_cdao->GetVersion());
};
BOOL CDAODB::Create(LPCSTR filename, LPCTSTR lpszLocale , int dwOptions ){
try{
if(m_rs!=NULL){
m_rs->Close();
delete m_rs; m_rs=NULL;
}
if(m_tbl!=NULL){
m_tbl->Close();
delete m_tbl; m_tbl=NULL;
}
if(m_cdao!=NULL){
m_cdao->Close();
delete m_cdao; m_cdao = NULL;
}
m_cdao = new CDaoDatabase(m_ws);
m_cdao->Create(filename,lpszLocale,dwOptions);
m_tbl = new CDaoTableDef(m_cdao);
m_rs = new CDaoRecordset(m_cdao);
}
catch(CDaoException* e) {
e->Delete(); return FALSE; }
catch(CMemoryException* e) { e->Delete(); return
FALSE; }
return TRUE;
};
BOOL CDAODB::ReOpen ( BOOL bExclusive , BOOL bReadOnly, LPCTSTR
lpszConnect){
Close();
return(Open(szOrgFileName,bExclusive,bReadOnly,lpszConnect));
};
void CDAODB::SetOpenPassword(LPCTSTR lpszPassword){
strcpy(szPassword,lpszPassword);
}
BOOL CDAODB::Open( LPCTSTR lpszName, LPCTSTR lpszConnect ,BOOL bExclusive , BOOL
bReadOnly){
return Open(lpszName,bExclusive,bReadOnly,lpszConnect);
}
BOOL CDAODB::Open( LPCTSTR lpszName, BOOL bExclusive, BOOL bReadOnly , LPCTSTR lpszConnect
){
try{
if(m_rs!=NULL){
m_rs->Close();
delete m_rs; m_rs=NULL;
}
if(m_tbl!=NULL){
m_tbl->Close();
delete m_tbl; m_tbl=NULL;
}
if(m_cdao!=NULL){
m_cdao->Close();
delete m_cdao; m_cdao = NULL;
}
m_cdao = new CDaoDatabase(m_ws);
strcpy(szOrgFileName,lpszName);
if( strlen(szPassword)!=0 ){
char buf[_MAX_PATH];
wsprintf(buf,";PWD=%s",szPassword);
m_cdao->Open(lpszName,bExclusive,bReadOnly,_T(buf)
);
}
else
m_cdao->Open(lpszName,bExclusive,bReadOnly,lpszConnect);
m_tbl = new CDaoTableDef(m_cdao);
m_rs = new CDaoRecordset(m_cdao);
}
catch(CDaoException* e) {
char errmes[256];
e->GetErrorMessage(errmes,256);
// MessageBox(NULL,errmes,"CDaoException
Error",MB_OK);
e->Delete(); return FALSE;
}
catch(CMemoryException* e) {
char errmes[256];
e->GetErrorMessage(errmes,256);
// MessageBox(NULL,errmes,"CDaoException
Error",MB_OK);
e->Delete(); return FALSE;
}
return TRUE;
};
//--------------------------------------
long CDAODB::Search(int nFieldIndex ,LPCSTR
szData){
BOOL b,b_tbl,b_rs;
long i,nCount;
char *p;
b_rs = b_tbl = FALSE;
if(m_tbl == NULL){
b_tbl = TRUE;
if((b=OpenTable("Default"))==FALSE){
return -1;}
}
if(m_rs == NULL){
b_rs = TRUE;
if((b= OpenRecord())!=TRUE){Close(); return
-1;}
}
nCount = GetCount(); // get records
SetPos(0);
for(i=0;i<nCount;i++,MoveNext()){
p=GetStr(nFieldIndex);
if(p==NULL)continue;
if(strcmp(p,szData)==0)break;
}
if(i==nCount)i=-1;
if(b_rs == TRUE) b = CloseRecord();
if(b_tbl == TRUE) CloseTable();
return i;
}
long CDAODB::Search(LPCSTR szFieldIndex,LPCSTR szData){
BOOL b,b_tbl,b_rs;
long i,nCount;
char *p;
b_rs = b_tbl = FALSE;
if(m_tbl == NULL){
b_tbl = TRUE;
if((b=OpenTable("Default"))==FALSE){
return -1;}
}
if(m_rs == NULL){
b_rs = TRUE;
if((b= OpenRecord())!=TRUE){Close(); return
-1;}
}
nCount = GetCount(); // get records
SetPos(0);
for(i=0;i<nCount;i++,MoveNext()){
p=GetStr(szFieldIndex);
if(p==NULL)continue;
if(strcmp(szData,p)==0)break;
}
if(i==nCount)i=-1;
if(b_rs == TRUE) b = CloseRecord();
if(b_tbl == TRUE) CloseTable();
return i;
}
long CDAODB::Search(int nFieldIndex,int nFieldIndex2,LPCSTR szData,LPCSTR szData2){
BOOL b,b_tbl,b_rs;
long i,nCount;
char *p;
b_rs = b_tbl = FALSE;
if(m_tbl == NULL){
b_tbl = TRUE;
if((b=OpenTable("Default"))==FALSE){
return -1;}
}
if(m_rs == NULL){
b_rs = TRUE;
if((b= OpenRecord())!=TRUE){Close(); return
-1;}
}
nCount = GetCount(); // get records
SetPos(0);
for(i=0;i<nCount;i++,MoveNext()){
p=GetStr(nFieldIndex);
if(p==NULL)continue;
if(strcmp(p,szData)==0)
{
p=GetStr(nFieldIndex2);
if(p==NULL){
if(strlen(szData2)==0)
break;
continue;
}
if(strcmp(p,szData2)==0)break;
}
}
if(i==nCount)i=-1;
if(b_rs == TRUE) b = CloseRecord();
if(b_tbl == TRUE) CloseTable();
return i;
}
long CDAODB::Search(LPCSTR szFieldIndex,LPCSTR
szFieldIndex2,LPCSTR szData,LPCSTR szData2){
BOOL b,b_tbl,b_rs;
long i,nCount;
char *p;
b_rs = b_tbl = FALSE;
if(m_tbl == NULL){
b_tbl = TRUE;
if((b=OpenTable("Default"))==FALSE){
return -1;}
}
if(m_rs == NULL){
b_rs = TRUE;
if((b= OpenRecord())!=TRUE){Close(); return
-1;}
}
nCount = GetCount(); // get records
SetPos(0);
for(i=0;i<nCount;i++,MoveNext()){
p=GetStr(szFieldIndex);
if(p==NULL)continue;
if(strcmp(p,szData)==0)
{
p=GetStr(szFieldIndex2);
if(p==NULL){
if(strlen(szData2)==0)
break;
continue;
}
if(strcmp(p,szData2)==0)break;
}
}
if(i==nCount)i=-1;
if(b_rs == TRUE) b = CloseRecord();
if(b_tbl == TRUE) CloseTable();
return i;
}
//--------------------------------------
long CDAODB::SearchI(int nFieldIndex ,LPCSTR
szData){
BOOL b,b_tbl,b_rs;
long i,nCount;
char *p;
b_rs = b_tbl = FALSE;
if(m_tbl == NULL){
b_tbl = TRUE;
if((b=OpenTable("Default"))==FALSE){
return -1;}
}
if(m_rs == NULL){
b_rs = TRUE;
if((b= OpenRecord())!=TRUE){Close(); return
-1;}
}
nCount = GetCount(); // get records
SetPos(0);
for(i=0;i<nCount;i++,MoveNext()){
p=GetStr(nFieldIndex);
if(p==NULL)continue;
if(strcmpi(p,szData)==0)break;
}
if(i==nCount)i=-1;
if(b_rs == TRUE) b = CloseRecord();
if(b_tbl == TRUE) CloseTable();
return i;
}
long CDAODB::SearchI(LPCSTR szFieldIndex,LPCSTR szData){
BOOL b,b_tbl,b_rs;
long i,nCount;
char *p;
b_rs = b_tbl = FALSE;
if(m_tbl == NULL){
b_tbl = TRUE;
if((b=OpenTable("Default"))==FALSE){
return -1;}
}
if(m_rs == NULL){
b_rs = TRUE;
if((b= OpenRecord())!=TRUE){Close(); return
-1;}
}
nCount = GetCount(); // get records
SetPos(0);
for(i=0;i<nCount;i++,MoveNext()){
p=GetStr(szFieldIndex);
if(p==NULL)continue;
if(strcmpi(p,szData)==0)break;
}
if(i==nCount)i=-1;
if(b_rs == TRUE) b = CloseRecord();
if(b_tbl == TRUE) CloseTable();
return i;
}
long CDAODB::SearchI(int nFieldIndex,int nFieldIndex2,LPCSTR szData,LPCSTR szData2){
BOOL b,b_tbl,b_rs;
long i,nCount;
char *p;
b_rs = b_tbl = FALSE;
if(m_tbl == NULL){
b_tbl = TRUE;
if((b=OpenTable("Default"))==FALSE){
return -1;}
}
if(m_rs == NULL){
b_rs = TRUE;
if((b= OpenRecord())!=TRUE){Close(); return
-1;}
}
nCount = GetCount(); // get records
SetPos(0);
for(i=0;i<nCount;i++,MoveNext()){
p=GetStr(nFieldIndex);
if(p==NULL)continue;
if(strcmpi(p,szData)==0)
{
p=GetStr(nFieldIndex2);
if(p==NULL){
if(strlen(szData2)==0)
break;
continue;
}
if(strcmpi(p,szData2)==0)break;
}
}
if(i==nCount)i=-1;
if(b_rs == TRUE) b = CloseRecord();
if(b_tbl == TRUE) CloseTable();
return i;
}
long CDAODB::SearchI(LPCSTR szFieldIndex,LPCSTR
szFieldIndex2,LPCSTR szData,LPCSTR szData2){
BOOL b,b_tbl,b_rs;
long i,nCount;
char *p;
b_rs = b_tbl = FALSE;
if(m_tbl == NULL){
b_tbl = TRUE;
if((b=OpenTable("Default"))==FALSE){
return -1;}
}
if(m_rs == NULL){
b_rs = TRUE;
if((b= OpenRecord())!=TRUE){Close(); return
-1;}
}
nCount = GetCount(); // get records
SetPos(0);
for(i=0;i<nCount;i++,MoveNext()){
p=GetStr(szFieldIndex);
if(p==NULL)continue;
if(strcmpi(p,szData)==0)
{
p=GetStr(szFieldIndex2);
if(p==NULL){
if(strlen(szData2)==0)
break;
continue;
}
if(strcmpi(p,szData2)==0)break;
}
}
if(i==nCount)i=-1;
if(b_rs == TRUE) b = CloseRecord();
if(b_tbl == TRUE) CloseTable();
return i;
}
//--------------------------------------------
long CDAODB::GetCurrentRecords(void){
BOOL b;
long nCount;
if((b=OpenTable("Default"))==FALSE){ return -1;}
b = OpenRecord();
if(b!=TRUE){Close(); return -1;}
nCount = GetCount(); // get records
b = CloseRecord();
CloseTable();
return nCount;
}
//--------------------------------------
// 指定フィールドの値がNULLならば指定データで初期化する
BOOL CDAODB::CkUpdateField(LPSTR szFieldName,COleVariant c){
BOOL b;
long i,nCount;
CDaoTableDefInfo tabledefinfo;
if((b= OpenTable("Default"))==FALSE){ return -1;}
if((b= OpenRecord())!=TRUE){Close(); return -1;}
nCount = GetCount(); // get records
for(i=0;i<nCount;i++){
COleVariant cd;
b=SetPos(i);
b=Get(szFieldName,cd);
if(LPVARIANT(cd)->byref==NULL){
b=Edit();
b=Set(szFieldName,c);
b=Update();
}
}
if(i==nCount)i=-1;
b = CloseRecord();
CloseTable();
return TRUE;
}
//--------------------------------------
// CommonDlg32 file open (load/save)
LPSTR CDAODB::File2Load( CWnd *lpcWnd ){
return(File2Load(lpcWnd->m_hWnd));
}
LPSTR CDAODB::File2Save( CWnd *lpcWnd ){
return(File2Save(lpcWnd->m_hWnd));
}
LPSTR CDAODB::File2Load( HWND hWnd )
{
static TCHAR strInitialDir[512] = "";
static TCHAR strPath[512];
static TCHAR strFileName[512];
TCHAR strCurrentName[512] = "*.mdb";
OPENFILENAME ofn = { sizeof(OPENFILENAME), hWnd, NULL, "MS Access\0.mdb", NULL,
0, 1, strCurrentName, 512, strFileName, 512, NULL,
"Open mdb File", OFN_FILEMUSTEXIST, 0, 1, ".mdb", 0,
NULL, NULL };
ofn.lpstrInitialDir =strInitialDir;
// Display the OpenFileName dialog. Then, try to load the specified file
if( TRUE == GetOpenFileName( &ofn ) ) { //return strFileName;
strcpy(strFileName,ofn.lpstrFile);return
strFileName; }
return NULL;
}
LPSTR CDAODB::File2Save( HWND hWnd )
{
static TCHAR strInitialDir[512] = "";
static TCHAR strPath[512];
static TCHAR strFileName[512];
TCHAR strCurrentName[512] = "*.mdb";
OPENFILENAME ofn = { sizeof(OPENFILENAME), hWnd, NULL, "MS Access\0.mdb", NULL,
0, 1, strCurrentName, 512, strFileName, 512, NULL,
"Open mdb File", OFN_FILEMUSTEXIST, 0, 1, ".mdb", 0,
NULL, NULL };
ofn.lpstrInitialDir =strInitialDir;
if( TRUE == GetSaveFileName( &ofn ) ) {//return strFileName;
strcpy(strFileName,ofn.lpstrFile);return
strFileName; }
return NULL;
}
//--------------------------------------
void CDAODB::CreateWorkspace(void){
m_ws = new CDaoWorkspace();
}
BOOL CDAODB::CreateWS( LPCTSTR lpszName, LPCTSTR lpszUserName , LPCTSTR lpszPassword ){
if(m_ws==NULL) m_ws = new CDaoWorkspace();
try{
m_ws->Create(lpszName,lpszUserName
,lpszPassword);
}
catch(CDaoException* e) {
char errmes[256];
e->GetErrorMessage(errmes,256);
MessageBox(NULL,errmes,"CDaoException
Error",MB_OK);
e->Delete(); return FALSE;
}
catch(CMemoryException* e) {
char errmes[256];
e->GetErrorMessage(errmes,256);
MessageBox(NULL,errmes,"CDaoMemoryException
Error",MB_OK);
e->Delete(); return FALSE;
}
return TRUE;
};
BOOL CDAODB::OpenWS(LPCTSTR szName){
if(m_ws==NULL) m_ws = new CDaoWorkspace();
try{
m_ws->Open(szName);
}
catch(CDaoException* e) {
char errmes[256];
e->GetErrorMessage(errmes,256);
MessageBox(NULL,errmes,"CDaoException
Error",MB_OK);
e->Delete(); return FALSE;
}
catch(CMemoryException* e) {
char errmes[256];
e->GetErrorMessage(errmes,256);
MessageBox(NULL,errmes,"CDaoMemoryException
Error",MB_OK);
e->Delete(); return FALSE;
}
return TRUE;
};
void CDAODB::CloseWS(void){
if(m_ws==NULL) return;
m_ws->Close();
delete(m_ws);
m_ws=NULL;
};
BOOL CDAODB::SetDefaultPassword( long dwPassword){
char buf[128];
wsprintf(buf,"%ld",dwPassword );
return SetDefaultPassword( buf );
}
BOOL CDAODB::SetDefaultPassword( LPCTSTR lpszPassword){
ASSERT(m_ws);
try{
m_ws->SetDefaultPassword(lpszPassword);
}
catch(CDaoException* e) {
char errmes[256];
e->GetErrorMessage(errmes,256);
MessageBox(NULL,errmes,"CDaoException
Error",MB_OK);
e->Delete(); return FALSE;
}
catch(CMemoryException* e) {
char errmes[256];
e->GetErrorMessage(errmes,256);
MessageBox(NULL,errmes,"CDaoMemoryException
Error",MB_OK);
e->Delete(); return FALSE;
}
return TRUE;
};
// EOF
//--------------------------------------
Copyright (C) Kitaro 1998