?? database.cpp
字號:
#include "StdAfx.h"
#include "Database.h"
CBooks::CBooks(void)
{
m_hDB = NULL;
m_hSesion = NULL;
m_bMounted = FALSE;
}
CBooks::~CBooks(void)
{
if(m_bMounted)
CeUnmountDBVol(&m_GUID);
if(m_hDB)
{
CloseHandle(m_hDB);
}
if(m_hSesion)
{
CloseHandle(m_hSesion);
}
}
BOOL CBooks::Open()
{
BOOL bReturn = CeMountDBVolEx(&m_GUID,BOOKS_DBPATH,NULL,OPEN_ALWAYS | EDB_MOUNT_FLAG);
if(!bReturn)
{
return FALSE;
}
m_bMounted = TRUE;
m_hSesion = CeCreateSession(&m_GUID);
m_oid = 0;
m_hDB = CeOpenDatabaseInSession(m_hSesion,&m_GUID,&m_oid,BOOKS_DBNAME,0,CEDB_AUTOINCREMENT,NULL);
if(INVALID_HANDLE_VALUE == m_hDB)
{
CEDBASEINFOEX cebi;
ZeroMemory(&cebi,sizeof(CEDBASEINFOEX));
cebi.dwSize = sizeof(CEDBASEINFOEX);
cebi.wVersion = CEDBASEINFO_VERSION;
cebi.dwFlags = CEDB_VALIDDBFLAGS | CEDB_VALIDNAME | CEDB_VALIDSORTSPEC;
cebi.wNumSortOrder = 1;
cebi.rgSortSpecs[0].wVersion = SORTORDERSPECEX_VERSION;
cebi.rgSortSpecs[0].wNumProps = 1;
cebi.rgSortSpecs[0].wKeyFlags = 0;
cebi.rgSortSpecs[0].rgPropID[0] = MAKELONG(CEVT_LPWSTR,1);
cebi.rgSortSpecs[0].rgdwFlags[0] = CEDB_SORT_CASEINSENSITIVE;
wcscpy(cebi.szDbaseName,BOOKS_DBNAME);
m_oid = CeCreateDatabaseWithProps(&m_GUID,&cebi,0,NULL);
if(m_oid)
{
m_hDB = CeOpenDatabaseInSession(m_hSesion,&m_GUID,&m_oid,BOOKS_DBNAME,0,CEDB_AUTOINCREMENT,NULL);
}
}
return (INVALID_HANDLE_VALUE != m_hDB);
}
CEOID CBooks::Read(CBookRecord& record)
{
WORD wPropId = 0;
LPBYTE pBuffer = NULL;
DWORD dwBuffer = 0;
CEOID oid = CeReadRecordPropsEx(m_hDB,CEDB_ALLOWREALLOC,&wPropId,NULL,&pBuffer,&dwBuffer,NULL);
if(oid)
{
record.Initialize((CEPROPVAL*)pBuffer);
LocalFree(pBuffer);
}
return oid;
}
CEOID CBooks::Read(CEOID oid,CBookRecord& record)
{
WORD wPropId = 0;
LPBYTE pBuffer = NULL;
DWORD dwBuffer = 0;
CEOID oidnew = CeReadRecordPropsEx(m_hDB,CEDB_ALLOWREALLOC,&wPropId,NULL,&pBuffer,&dwBuffer,NULL);
if(oidnew)
{
record.Initialize((CEPROPVAL*)pBuffer);
LocalFree(pBuffer);
}
return oidnew;
}
CEOID CBooks::Write(CBookRecord& record)
{
CEPROPVAL* pVal = record.GetValue();
CEOID oid = CeWriteRecordProps(m_hDB,0,MAX_FIELDS,pVal);
delete[] pVal;
return oid;
}
CEOID CBooks::Write(CEOID oid,CBookRecord& record)
{
CEPROPVAL* pVal = record.GetValue();
CEOID oidnew = CeWriteRecordProps(m_hDB,oid,MAX_FIELDS,pVal);
delete[] pVal;
return oidnew;
}
BOOL CBooks::Delete(CEOID oid)
{
return CeDeleteRecord(m_hDB,oid);
}
BOOL CBooks::MoveFirst()
{
CEOID oid = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_BEGINNING,0,0,NULL);
return (oid != NULL);
}
BOOL CBooks::MoveLast()
{
CEOID oid = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_END,0,0,NULL);
return (oid != NULL);
}
BOOL CBooks::MoveTo(CEOID oid)
{
CEOID oidnew = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_CEOID,oid,0,NULL);
return (oidnew != NULL);
}
BOOL CBooks::Find(CBookRecord& record)
{
MoveFirst();
CBookRecord rec;
CEOID oid = Read(rec);
BOOL bFound = FALSE;
while(oid)
{
if(lstrcmpi(record.GetISBN(),rec.GetISBN()) == 0)
{
bFound = TRUE;
break;
}
oid = Read(rec);
}
MoveFirst();
return bFound;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -