📄 csendmaildb.cpp
字号:
// CSendMailDB.cpp: implementation of the CSendMailDB class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CSendMailDB.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSendMailDB g_sendmaildb;
CSendMailDB::CSendMailDB()
{
}
CSendMailDB::~CSendMailDB()
{
}
BOOL CSendMailDB::MountVolum(LPWSTR vname)
{
if(vname == NULL)
{
CREATE_SYSTEMGUID (&m_ceguid);
}
else
{
if(CeMountDBVol (&m_ceguid,vname,OPEN_ALWAYS) == FALSE)
return FALSE;
}
return TRUE;
}
BOOL CSendMailDB::CreateDataBase(LPWSTR dbname)
{
CEDBASEINFO dbinfo;
dbinfo.dwFlags = CEDB_VALIDNAME|CEDB_VALIDTYPE|CEDB_VALIDSORTSPEC;
lstrcpy(dbinfo.szDbaseName,dbname);
dbinfo.dwDbaseType = SENDMAIL_BOX_DBTYPE;
dbinfo.wNumSortOrder = SENDMAIL_SORT_ORDER;
dbinfo.rgSortSpecs[0].propid = ID_TIME;
dbinfo.rgSortSpecs[0].dwFlags = 0;
dbinfo.rgSortSpecs[1].propid = ID_SIZE;
dbinfo.rgSortSpecs[1].dwFlags = 0;
dbinfo.rgSortSpecs[2].propid = ID_ADDRESS;
dbinfo.rgSortSpecs[2].dwFlags = 0;
dbinfo.rgSortSpecs[3].propid = ID_SENDFLAG;
dbinfo.rgSortSpecs[3].dwFlags = 0;
if(CeCreateDatabaseEx(&m_ceguid,&dbinfo) == NULL)
{
DWORD error = GetLastError();
if(error == ERROR_DUP_NAME)
return TRUE;
return FALSE;
}
return TRUE;
}
BOOL CSendMailDB::UnmmountVolume()
{
CloseHandle (m_hdb);
BOOL res = CeUnmountDBVol(&m_ceguid);
int id = GetLastError();
return res;
}
BOOL CSendMailDB::ReadRecord(CSMailImf& record)
{
WORD wProps;
CEOID oid;
PCEPROPVAL pRecord;
PBYTE pBuff;
DWORD dwRecSize;
int i;
// Read all properties for the record.
pBuff = 0; // Let the function allocate the buffer.
oid = CeReadRecordProps(m_hdb, CEDB_ALLOWREALLOC, &wProps, NULL,
&(LPBYTE)pBuff, &dwRecSize);
// Failure on read.
if (oid == 0)
return FALSE;
// Copy the data from the record to the structure. The order
// of the array is not defined.
memset (&record, 0 , sizeof (record)); // Zero return struct
record.m_oidRecord = oid;
pRecord = (PCEPROPVAL)pBuff; // Point to CEPROPVAL
// array.
for (i = 0; i < wProps; i++)
{
switch (pRecord->propid)
{
case ID_SUB:
lstrcpy (record.m_mailsubject, pRecord->val.lpwstr);
break;
case ID_FILE:
lstrcpy (record.m_file, pRecord->val.lpwstr);
break;
case ID_ADDRESS:
lstrcpy (record.m_address, pRecord->val.lpwstr);
break;
case ID_SENDFLAG:
record.m_sendflag = pRecord->val.iVal;
break;
case ID_NUMADDRESS:
record.m_numaddress = pRecord->val.iVal;
case ID_TIME:
record.m_time = pRecord->val.filetime;
break;
case ID_SIZE:
record.m_size = pRecord->val.lVal;
break;
}
pRecord++;
}
LocalFree (pBuff);
return TRUE;
}
BOOL CSendMailDB::EditRecord(CSMailImf &record)
{
CEPROPVAL pro[7];
pro[0].propid = ID_SUB;
pro[0].wFlags = 0;
pro[0].val.lpwstr = record.m_mailsubject;
pro[1].propid = ID_FILE;
pro[1].wFlags = 0;
pro[1].val.lpwstr = record.m_file;
pro[2].propid = ID_ADDRESS;
pro[2].wFlags = 0;
pro[2].val.lpwstr = record.m_address;
pro[3].propid = ID_SENDFLAG;
pro[3].wFlags = 0;
pro[3].val.iVal = record.m_sendflag;
pro[4].propid = ID_NUMADDRESS;
pro[4].wFlags = 0;
pro[4].val.iVal = record.m_numaddress;
pro[5].propid = ID_TIME;
pro[5].wFlags = 0;
pro[5].val.filetime = record.m_time;
pro[6].propid = ID_SIZE;
pro[6].wFlags = 0;
pro[6].val.lVal = record.m_size;
if(CeWriteRecordProps(m_hdb,record.m_oidRecord,7,pro) == 0)
return FALSE;
return TRUE;
}
BOOL CSendMailDB::DeleteRecord(CSMailImf &record)
{
return CeDeleteRecord(m_hdb,record.m_oidRecord);
}
BOOL CSendMailDB::OpenDataBase(CEPROPID proid,LPWSTR dbname)
{
CEOID id = 0;
CloseHandle (m_hdb);
m_hdb = CeOpenDatabaseEx(&m_ceguid,&id,dbname,proid,0,NULL);
if(m_hdb == INVALID_HANDLE_VALUE )
{
DWORD dw = GetLastError();
return FALSE;
}
return TRUE;
}
BOOL CSendMailDB::GetNumRecord(LPWSTR dbname)
{
HANDLE hDBList;
CEOID oidDB;
CEOIDINFO dbinfo;
hDBList = CeFindFirstDatabaseEx (&m_ceguid,SENDMAIL_BOX_DBTYPE );
if (hDBList != INVALID_HANDLE_VALUE)
{
oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
while (oidDB)
{
CeOidGetInfoEx(&m_ceguid,oidDB,&dbinfo);
if(dbinfo.wObjType == OBJTYPE_DATABASE)
{
if(lstrcmp(dbinfo.infDatabase.szDbaseName,dbname) == 0)
return dbinfo.infDatabase.wNumRecords;
}
oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
}
CloseHandle (hDBList);
}
return -1;
}
BOOL CSendMailDB::SeekToPos(int index, CSMailImf &mail, CEPROPVAL *proval, int num)
{
if(proval == NULL || num <= 0||proval->propid == 0)
{
mail.m_oidRecord = CeSeekDatabaseEx(m_hdb,CEDB_SEEK_BEGINNING,index,0,NULL);
if(mail.m_oidRecord == 0)
return FALSE;
return TRUE;
}
int x = 1;
mail.m_oidRecord = CeSeekDatabaseEx(m_hdb,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)(proval),1,NULL);
if(mail.m_oidRecord == 0)
{
return FALSE;
}
if(index == 0)
return TRUE;
mail.m_oidRecord = CeSeekDatabaseEx(m_hdb,CEDB_SEEK_CURRENT,index,0,NULL);
if(mail.m_oidRecord == 0)
return FALSE;
return TRUE;
}
int CSendMailDB::GetNumDisplay(LPWSTR dbname,CEPROPVAL *proval, int num)
{
if(proval == NULL||num <= 0||proval->propid == 0)
return GetNumRecord(dbname);
CeSeekDatabaseEx(m_hdb,CEDB_SEEK_BEGINNING,0,0,NULL);
int res = 0;
if(CeSeekDatabaseEx(m_hdb,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)(proval),1,NULL) != 0)
res = 1;
else
{
return 0;
}
while(CeSeekDatabaseEx(m_hdb,CEDB_SEEK_VALUENEXTEQUAL,(DWORD)(proval),1,NULL) != 0)
res++;
return res;
}
BOOL CSendMailDB::DeleteSMailDB(LPWSTR username)
{
HANDLE hDBList;
CEOID oidDB;
CEOIDINFO dbinfo;
hDBList = CeFindFirstDatabaseEx (&m_ceguid,SENDMAIL_BOX_DBTYPE );
if (hDBList != INVALID_HANDLE_VALUE)
{
oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
while (oidDB)
{
CeOidGetInfoEx(&m_ceguid,oidDB,&dbinfo);
if(dbinfo.wObjType == OBJTYPE_DATABASE)
{
if(lstrcmp(dbinfo.infDatabase.szDbaseName,username) == 0)
{
return CeDeleteDatabaseEx(&m_ceguid,oidDB);
}
}
oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
}
CloseHandle (hDBList);
}
return FALSE;
}
BOOL CSendMailDB::ClearRecord(LPWSTR username)
{
CEOID id;
while(id = CeSeekDatabaseEx(m_hdb,CEDB_SEEK_BEGINNING,0,NULL,NULL))
{
CeDeleteRecord(m_hdb,id);
}
return TRUE;
}
BOOL CSendMailDB::DeleteRecord(CSMailImf *precord)
{
return CeDeleteRecord(m_hdb,precord->m_oidRecord);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -