[code]
// DBControl.cpp: implementation of the CDBControl class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DBControl.h"
#include "xDefine.h"
#include "kdwDebug.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDBControl::CDBControl()
{
_szCDBSpam = TEXT("\\DiskOnChip\\MessageSpam.DB");
_szDBSpam = TEXT("DBMountMessageSpam");
}
CDBControl::~CDBControl()
{
}
BOOL CDBControl::Mount()
{
if ( !CeMountDBVol( &m_guid, _szCDBSpam, OPEN_ALWAYS ) ) {
DWORD dwErr = GetLastError();
RETAILMSG(KDW_DEBUG, ( L"\r\n [MessageAPI] Mount Fault Get Last Error: %d\r\n ", dwErr) );
return FALSE;
}
else {
RETAILMSG(KDW_DEBUG, ( L"\r\n [MessageAPI] Mount success \r\n"));
return TRUE;
}
}
void CDBControl::UnMount()
{
CeFlushDBVol( &m_guid);
if ( !CeUnmountDBVol( &m_guid ) ) {
DWORD dwErr = GetLastError();
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] UnMount Fault Get Last Error: %d \r\n", dwErr) );
}
else {
RETAILMSG(KDW_DEBUG, ( L"\r\n [MessageAPI] UnMount success \r\n ") );
}
}
BOOL CDBControl::Create()
{
// TODO: Add your control notification handler code here
CEDBASEINFO m_ceDBInfo;
memset (&m_ceDBInfo, 0, sizeof (m_ceDBInfo));
// 현재 구조체안의 어떤 필드가 유효한지 나타내는 플래그
m_ceDBInfo.dwFlags = CEDB_VALIDCREATE;
wcscpy(m_ceDBInfo.szDbaseName, _szDBSpam); // 데이터베이스명
m_ceDBInfo.dwDbaseType = 0; // 유일한 타입(DB) 식별자
m_ceDBInfo.wNumSortOrder = 1; // 정렬 개수
m_ceDBInfo.rgSortSpecs[0].propid = PROP_SPAM_DATA;// 시작 시간 필드로 기준으로 정렬
m_ceDBInfo.rgSortSpecs[0].dwFlags = NULL;
m_ceOid = CeCreateDatabaseEx(&m_guid, &m_ceDBInfo); // DB 생성
DWORD dwErr = GetLastError();
if(m_ceOid == NULL) {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] FALSE CreateDataBase Get Last Error: %d \r\n", GetLastError() ) );
return FALSE;
}
else {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] success CreateDataBase \r\n") );
return TRUE;
}
}
BOOL CDBControl::Open()
{
if(_szDBSpam)
{
m_ceOid = 0;
}
m_hDB = CeOpenDatabaseEx(&m_guid,
&m_ceOid,
_szDBSpam, // DB 이름
PROP_SPAM_DATA, // 정렬방식 결정 (이름 으로 정렬)
0, // Read할때 포인터 자동 증가 (CEDB_AUTOINCREMENT)
NULL // 통지메시지를 받지 않음
);
if(m_hDB == INVALID_HANDLE_VALUE) {
DWORD dwErr = GetLastError();
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] FALSE OpenDB Get Last Error: %d \r\n", dwErr) );
return FALSE;
}
else {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] success OpenDB Get Last Error: %d \r\n", GetLastError() ) );
return TRUE;
}
}
BOOL CDBControl::Close()
{
if(!CloseHandle(m_hDB)) {
DWORD dwErr = GetLastError();
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] FALSE CloseHandle Get Last Error: %d \r\n", GetLastError() ) );
return FALSE;
}
else {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] success CloseHandle Get Last Error: %d \r\n", GetLastError() ) );
return TRUE;
}
}
BOOL CDBControl::Start()
{
BOOL bRetVal = TRUE;
BOOL bMount = Mount();
if(!bMount)
{
CopyFile(L"\\DiskOnChip\\MessageSpam_bk.DB", L"\\DiskOnChip\\MessageSpam.DB", FALSE);
RETAILMSG(1, (TEXT("[MessageAPI] CDBControl::DBStart [ back-up ]\r\n")));
bMount = Mount();
if(!bMount)
{
DeleteFile(L"\\DiskOnChip\\MessageSpam.DB");
bMount = Mount();
RETAILMSG(1, (TEXT("[MessageAPI] CDBControl::DBStart [ remove and re-mount ]\r\n")));
}
}
if(bMount && !Open())
{
RETAILMSG(KDW_DEBUG, (L"[MessageAPI] CDBControl::Start Open fail pre Create \r\n"));
if(!Create()){
UnMount();
bRetVal = FALSE;
RETAILMSG(KDW_DEBUG, (L"[MessageAPI] CDBControl::Start Create fail \r\n"));
}
else
{
if(!Open())
{
UnMount();
bRetVal = FALSE;
RETAILMSG(KDW_DEBUG, (L"[MessageAPI] CDBControl::Start re Open fail \r\n"));
}
}
}
return bRetVal;
}
void CDBControl::End()
{
Close();
UnMount();
}
int CDBControl::GetCount()
{
DWORD Index;
m_ceOidRec = CeSeekDatabase (m_hDB, CEDB_SEEK_END, 0, &Index);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0) {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] FALSE GetCount \r\nGet Last Error: %d \r\n", dwErr) );
return -1;
}
else
{
return Index+1;
}
}
CEOID CDBControl::Read(int index, SPAM_DATA *spam)
{
CEPROPVAL *props = NULL;
DWORD dwBuf;
WORD wProps;
m_ceOidRec = CeSeekDatabase (m_hDB, CEDB_SEEK_BEGINNING, index, &m_dwIndex);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0)
{
return FALSE;
}
else
{
m_ceOidRec = CeReadRecordProps(m_hDB, CEDB_ALLOWREALLOC,
&wProps, NULL,
(LPBYTE*)&props, &dwBuf );
if(m_ceOidRec)
{
spam->type =props[0].val.lVal;
wcscpy(spam->data , props[1].val.lpwstr);
LocalFree(props);
spam->oid = m_ceOidRec;
}
return m_ceOidRec;
}
}
CEOID CDBControl::Read(CEOID oid, SPAM_DATA *spam)
{
CEPROPVAL *props = NULL;
DWORD dwBuf;
WORD wProps;
m_ceOidRec = CeSeekDatabase (m_hDB, CEDB_SEEK_CEOID, oid, &m_dwIndex);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0)
{
return FALSE;
}
else
{
m_ceOidRec = CeReadRecordProps(m_hDB, CEDB_ALLOWREALLOC,
&wProps, NULL,
(LPBYTE*)&props, &dwBuf );
if(m_ceOidRec)
{
spam->type =props[0].val.lVal;
wcscpy(spam->data , props[1].val.lpwstr);
LocalFree(props);
spam->oid = m_ceOidRec;
}
return m_ceOidRec;
}
}
BOOL CDBControl::Write(SPAM_DATA *spam)
{
CEPROPVAL pRecord[NUM_DB_PROPS_SPAM];
TCHAR szName[MAX_PATH] = _T("Name");
for(int i=0; i<NUM_DB_PROPS_SPAM; i++)
memset (&pRecord[i], 0, sizeof(CEPROPVAL));
pRecord[0].propid = PROP_SPAM_TYPE;
pRecord[0].val.lVal = (LONG)spam->type;
pRecord[1].propid = PROP_SPAM_DATA;
pRecord[1].val.lpwstr = (LPTSTR)(LPCTSTR)spam->data;
m_ceOidRec = CeWriteRecordProps(m_hDB, 0, NUM_DB_PROPS_SPAM, pRecord);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0) {
return FALSE;
}
else {
return TRUE;
}
}
BOOL CDBControl::ReWrite(SPAM_DATA *spam, CEOID oid)
{
CEPROPVAL pRecord[NUM_DB_PROPS_SPAM];
TCHAR szName[MAX_PATH] = _T("Name");
for(int i=0; i<NUM_DB_PROPS_SPAM; i++)
memset (&pRecord[i], 0, sizeof(CEPROPVAL));
pRecord[0].propid = PROP_SPAM_TYPE;
pRecord[0].val.lVal = (LONG)spam->type;
pRecord[1].propid = PROP_SPAM_DATA;
pRecord[1].val.lpwstr = (LPTSTR)(LPCTSTR)spam->data;
m_ceOidRec = CeWriteRecordProps(m_hDB, oid, NUM_DB_PROPS_SPAM, pRecord);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0) {
return FALSE;
}
else {
return TRUE;
}
}
BOOL CDBControl::Delete(CEOID oid)
{
int flag = CeDeleteRecord( m_hDB, oid);
return flag;
}
// DBControl.h: interface for the CDBControl class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DBCONTROL_H__58C79D27_50BD_4CA4_92B9_C0E503ECC296__INCLUDED_)
#define AFX_DBCONTROL_H__58C79D27_50BD_4CA4_92B9_C0E503ECC296__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//#include "Afxtempl.h"
#define NUM_DB_PROPS_SPAM 2
// Property ID (Common)
#define PROP_SPAM_TYPE MAKELONG(CEVT_I2 , 1) // Index (PK)
#define PROP_SPAM_DATA MAKELONG(CEVT_LPWSTR, 2) // Name
struct SPAM_DATA
{
CEOID oid;
TCHAR data[256];
int type;
};
class CDBControl
{
public:
BOOL Delete(CEOID oid);
BOOL ReWrite(SPAM_DATA *spam, CEOID oid);
BOOL Write(SPAM_DATA *spam);
CEOID Read(CEOID oid, SPAM_DATA *spam);
CEOID Read(int index, SPAM_DATA* spam);
int GetCount();
void End();
BOOL Start();
BOOL Close();
BOOL Open();
BOOL Create();
BOOL Mount();
void UnMount();
HANDLE m_hDB;
CEOID m_ceOid;
CEGUID m_guid;
CEOID m_ceOidRec;
DWORD m_dwIndex;
LPTSTR _szCDBSpam;
LPTSTR _szDBSpam;
CDBControl();
virtual ~CDBControl();
};
#endif // !defined(AFX_DBCONTROL_H__58C79D27_50BD_4CA4_92B9_C0E503ECC296__INCLUDED_)
[/code]
// DBControl.cpp: implementation of the CDBControl class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DBControl.h"
#include "xDefine.h"
#include "kdwDebug.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDBControl::CDBControl()
{
_szCDBSpam = TEXT("\\DiskOnChip\\MessageSpam.DB");
_szDBSpam = TEXT("DBMountMessageSpam");
}
CDBControl::~CDBControl()
{
}
BOOL CDBControl::Mount()
{
if ( !CeMountDBVol( &m_guid, _szCDBSpam, OPEN_ALWAYS ) ) {
DWORD dwErr = GetLastError();
RETAILMSG(KDW_DEBUG, ( L"\r\n [MessageAPI] Mount Fault Get Last Error: %d\r\n ", dwErr) );
return FALSE;
}
else {
RETAILMSG(KDW_DEBUG, ( L"\r\n [MessageAPI] Mount success \r\n"));
return TRUE;
}
}
void CDBControl::UnMount()
{
CeFlushDBVol( &m_guid);
if ( !CeUnmountDBVol( &m_guid ) ) {
DWORD dwErr = GetLastError();
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] UnMount Fault Get Last Error: %d \r\n", dwErr) );
}
else {
RETAILMSG(KDW_DEBUG, ( L"\r\n [MessageAPI] UnMount success \r\n ") );
}
}
BOOL CDBControl::Create()
{
// TODO: Add your control notification handler code here
CEDBASEINFO m_ceDBInfo;
memset (&m_ceDBInfo, 0, sizeof (m_ceDBInfo));
// 현재 구조체안의 어떤 필드가 유효한지 나타내는 플래그
m_ceDBInfo.dwFlags = CEDB_VALIDCREATE;
wcscpy(m_ceDBInfo.szDbaseName, _szDBSpam); // 데이터베이스명
m_ceDBInfo.dwDbaseType = 0; // 유일한 타입(DB) 식별자
m_ceDBInfo.wNumSortOrder = 1; // 정렬 개수
m_ceDBInfo.rgSortSpecs[0].propid = PROP_SPAM_DATA;// 시작 시간 필드로 기준으로 정렬
m_ceDBInfo.rgSortSpecs[0].dwFlags = NULL;
m_ceOid = CeCreateDatabaseEx(&m_guid, &m_ceDBInfo); // DB 생성
DWORD dwErr = GetLastError();
if(m_ceOid == NULL) {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] FALSE CreateDataBase Get Last Error: %d \r\n", GetLastError() ) );
return FALSE;
}
else {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] success CreateDataBase \r\n") );
return TRUE;
}
}
BOOL CDBControl::Open()
{
if(_szDBSpam)
{
m_ceOid = 0;
}
m_hDB = CeOpenDatabaseEx(&m_guid,
&m_ceOid,
_szDBSpam, // DB 이름
PROP_SPAM_DATA, // 정렬방식 결정 (이름 으로 정렬)
0, // Read할때 포인터 자동 증가 (CEDB_AUTOINCREMENT)
NULL // 통지메시지를 받지 않음
);
if(m_hDB == INVALID_HANDLE_VALUE) {
DWORD dwErr = GetLastError();
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] FALSE OpenDB Get Last Error: %d \r\n", dwErr) );
return FALSE;
}
else {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] success OpenDB Get Last Error: %d \r\n", GetLastError() ) );
return TRUE;
}
}
BOOL CDBControl::Close()
{
if(!CloseHandle(m_hDB)) {
DWORD dwErr = GetLastError();
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] FALSE CloseHandle Get Last Error: %d \r\n", GetLastError() ) );
return FALSE;
}
else {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] success CloseHandle Get Last Error: %d \r\n", GetLastError() ) );
return TRUE;
}
}
BOOL CDBControl::Start()
{
BOOL bRetVal = TRUE;
BOOL bMount = Mount();
if(!bMount)
{
CopyFile(L"\\DiskOnChip\\MessageSpam_bk.DB", L"\\DiskOnChip\\MessageSpam.DB", FALSE);
RETAILMSG(1, (TEXT("[MessageAPI] CDBControl::DBStart [ back-up ]\r\n")));
bMount = Mount();
if(!bMount)
{
DeleteFile(L"\\DiskOnChip\\MessageSpam.DB");
bMount = Mount();
RETAILMSG(1, (TEXT("[MessageAPI] CDBControl::DBStart [ remove and re-mount ]\r\n")));
}
}
if(bMount && !Open())
{
RETAILMSG(KDW_DEBUG, (L"[MessageAPI] CDBControl::Start Open fail pre Create \r\n"));
if(!Create()){
UnMount();
bRetVal = FALSE;
RETAILMSG(KDW_DEBUG, (L"[MessageAPI] CDBControl::Start Create fail \r\n"));
}
else
{
if(!Open())
{
UnMount();
bRetVal = FALSE;
RETAILMSG(KDW_DEBUG, (L"[MessageAPI] CDBControl::Start re Open fail \r\n"));
}
}
}
return bRetVal;
}
void CDBControl::End()
{
Close();
UnMount();
}
int CDBControl::GetCount()
{
DWORD Index;
m_ceOidRec = CeSeekDatabase (m_hDB, CEDB_SEEK_END, 0, &Index);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0) {
RETAILMSG(KDW_DEBUG,( L"\r\n [MessageAPI] FALSE GetCount \r\nGet Last Error: %d \r\n", dwErr) );
return -1;
}
else
{
return Index+1;
}
}
CEOID CDBControl::Read(int index, SPAM_DATA *spam)
{
CEPROPVAL *props = NULL;
DWORD dwBuf;
WORD wProps;
m_ceOidRec = CeSeekDatabase (m_hDB, CEDB_SEEK_BEGINNING, index, &m_dwIndex);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0)
{
return FALSE;
}
else
{
m_ceOidRec = CeReadRecordProps(m_hDB, CEDB_ALLOWREALLOC,
&wProps, NULL,
(LPBYTE*)&props, &dwBuf );
if(m_ceOidRec)
{
spam->type =props[0].val.lVal;
wcscpy(spam->data , props[1].val.lpwstr);
LocalFree(props);
spam->oid = m_ceOidRec;
}
return m_ceOidRec;
}
}
CEOID CDBControl::Read(CEOID oid, SPAM_DATA *spam)
{
CEPROPVAL *props = NULL;
DWORD dwBuf;
WORD wProps;
m_ceOidRec = CeSeekDatabase (m_hDB, CEDB_SEEK_CEOID, oid, &m_dwIndex);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0)
{
return FALSE;
}
else
{
m_ceOidRec = CeReadRecordProps(m_hDB, CEDB_ALLOWREALLOC,
&wProps, NULL,
(LPBYTE*)&props, &dwBuf );
if(m_ceOidRec)
{
spam->type =props[0].val.lVal;
wcscpy(spam->data , props[1].val.lpwstr);
LocalFree(props);
spam->oid = m_ceOidRec;
}
return m_ceOidRec;
}
}
BOOL CDBControl::Write(SPAM_DATA *spam)
{
CEPROPVAL pRecord[NUM_DB_PROPS_SPAM];
TCHAR szName[MAX_PATH] = _T("Name");
for(int i=0; i<NUM_DB_PROPS_SPAM; i++)
memset (&pRecord[i], 0, sizeof(CEPROPVAL));
pRecord[0].propid = PROP_SPAM_TYPE;
pRecord[0].val.lVal = (LONG)spam->type;
pRecord[1].propid = PROP_SPAM_DATA;
pRecord[1].val.lpwstr = (LPTSTR)(LPCTSTR)spam->data;
m_ceOidRec = CeWriteRecordProps(m_hDB, 0, NUM_DB_PROPS_SPAM, pRecord);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0) {
return FALSE;
}
else {
return TRUE;
}
}
BOOL CDBControl::ReWrite(SPAM_DATA *spam, CEOID oid)
{
CEPROPVAL pRecord[NUM_DB_PROPS_SPAM];
TCHAR szName[MAX_PATH] = _T("Name");
for(int i=0; i<NUM_DB_PROPS_SPAM; i++)
memset (&pRecord[i], 0, sizeof(CEPROPVAL));
pRecord[0].propid = PROP_SPAM_TYPE;
pRecord[0].val.lVal = (LONG)spam->type;
pRecord[1].propid = PROP_SPAM_DATA;
pRecord[1].val.lpwstr = (LPTSTR)(LPCTSTR)spam->data;
m_ceOidRec = CeWriteRecordProps(m_hDB, oid, NUM_DB_PROPS_SPAM, pRecord);
DWORD dwErr = GetLastError();
if(m_ceOidRec == 0) {
return FALSE;
}
else {
return TRUE;
}
}
BOOL CDBControl::Delete(CEOID oid)
{
int flag = CeDeleteRecord( m_hDB, oid);
return flag;
}
// DBControl.h: interface for the CDBControl class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DBCONTROL_H__58C79D27_50BD_4CA4_92B9_C0E503ECC296__INCLUDED_)
#define AFX_DBCONTROL_H__58C79D27_50BD_4CA4_92B9_C0E503ECC296__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//#include "Afxtempl.h"
#define NUM_DB_PROPS_SPAM 2
// Property ID (Common)
#define PROP_SPAM_TYPE MAKELONG(CEVT_I2 , 1) // Index (PK)
#define PROP_SPAM_DATA MAKELONG(CEVT_LPWSTR, 2) // Name
struct SPAM_DATA
{
CEOID oid;
TCHAR data[256];
int type;
};
class CDBControl
{
public:
BOOL Delete(CEOID oid);
BOOL ReWrite(SPAM_DATA *spam, CEOID oid);
BOOL Write(SPAM_DATA *spam);
CEOID Read(CEOID oid, SPAM_DATA *spam);
CEOID Read(int index, SPAM_DATA* spam);
int GetCount();
void End();
BOOL Start();
BOOL Close();
BOOL Open();
BOOL Create();
BOOL Mount();
void UnMount();
HANDLE m_hDB;
CEOID m_ceOid;
CEGUID m_guid;
CEOID m_ceOidRec;
DWORD m_dwIndex;
LPTSTR _szCDBSpam;
LPTSTR _szDBSpam;
CDBControl();
virtual ~CDBControl();
};
#endif // !defined(AFX_DBCONTROL_H__58C79D27_50BD_4CA4_92B9_C0E503ECC296__INCLUDED_)
[/code]
'Windows > MFC' 카테고리의 다른 글
scrollbar 스크롤 바 정리 (0) | 2013.10.02 |
---|---|
SCROLLINFO (0) | 2013.10.02 |
batch file (0) | 2013.10.02 |
ON_MESSAGE 인자 (0) | 2013.10.02 |
AttriWndBase (0) | 2013.10.02 |