📄 sysedb.cpp
字号:
//BOOL rs = FALSE;
if(!m_bInitial) // 没有初始化
{
return FALSE; // 返回false
}
//WORD wProps = 3;
//CEPROPVAL propVal[3];
//memset(propVal,0,sizeof(CEPROPVAL)*3);
WORD wProps = 1;
CEPROPVAL propVal[1];
memset(propVal,0,sizeof(CEPROPVAL)*1);
propVal[0].propid = StreamDataPropid;
propVal[0].val.blob.lpb = (LPBYTE)&item;
propVal[0].val.blob.dwCount = sizeof(item);
// propVal[1].propid = PhoneNumberPropid;
// propVal[1].val.lpwstr = item.number;
// propVal[2].propid = OrderPropid;
// propVal[2].val.ulVal = ++m_dwMaxPrefixOrderID;
CEOID oidRecord = CeWriteRecordProps(m_hDB,0,wProps,propVal);
DWORD errCoe = GetLastError();
if(errCoe == ERROR_ALREADY_EXISTS)
{
return errCoe;
}
//ERROR_ALREADY_EXISTS
if(oidRecord != 0)
{
item.ceoid = oidRecord;
//rs = TRUE;
}
return errCoe;
//return rs;
}
DWORD CSysDB::AddStreamDBItem(void *pData , int cbSize)
{
//BOOL rs = FALSE;
if(!m_bInitial) // 没有初始化
{
return FALSE; // 返回false
}
//WORD wProps = 3;
//CEPROPVAL propVal[3];
//memset(propVal,0,sizeof(CEPROPVAL)*3);
WORD wProps = 1;
CEPROPVAL propVal[1];
memset(propVal,0,sizeof(CEPROPVAL)*1);
propVal[0].propid = StreamDataPropid;
propVal[0].val.blob.lpb = (LPBYTE)pData;
propVal[0].val.blob.dwCount = cbSize;
// propVal[1].propid = PhoneNumberPropid;
// propVal[1].val.lpwstr = item.number;
// propVal[2].propid = OrderPropid;
// propVal[2].val.ulVal = ++m_dwMaxPrefixOrderID;
CEOID oidRecord = CeWriteRecordProps(m_hDB,0,wProps,propVal);
DWORD errCoe = GetLastError();
if(errCoe == ERROR_ALREADY_EXISTS)
{
return errCoe;
}
//ERROR_ALREADY_EXISTS
if(oidRecord != 0)
{
//item.ceoid = oidRecord;
//rs = TRUE;
}
return errCoe;
//return rs;
}
BOOL CSysDB::ModifyAnPrefixItem(ITEMData &item)
{
if(m_bInitial)
{
CEOID oid = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_CEOID,item.ceoid,0,NULL);
if(0 != oid)
{
WORD wProps = 2;
CEPROPVAL propVal[2];
memset(propVal,0,sizeof(CEPROPVAL)*2);
propVal[0].propid = NamePropid;
propVal[0].val.lpwstr = item.name;
propVal[1].propid = PhoneNumberPropid;
propVal[1].val.lpwstr = item.number;
CEOID oidRecord = CeWriteRecordProps(m_hDB,oid,wProps,propVal);
if(oidRecord == oid)
{
return TRUE;
}
}
}
return FALSE;
}
BOOL CSysDB::ModifyAnStreamDBItem(ITEMData &item)
{
if(m_bInitial)
{
CEOID oid = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_CEOID,item.ceoid,0,NULL);
if(0 != oid)
{
WORD wProps = 1;
CEPROPVAL propVal[1];
memset(propVal,0,sizeof(CEPROPVAL)*1);
propVal[0].propid = StreamDataPropid;
propVal[0].val.blob.lpb = (LPBYTE)&item;
propVal[0].val.blob.dwCount = sizeof(item);
CEOID oidRecord = CeWriteRecordProps(m_hDB,oid,wProps,propVal);
if(oidRecord == oid)
{
return TRUE;
}
}
}
return FALSE;
}
BOOL CSysDB::DelAnPrefixItem(ITEMData &item)
{
if(m_bInitial)
{
if(CeDeleteRecord(m_hDB,item.ceoid))
return TRUE;
}
return FALSE;
}
DWORD CSysDB::GetAllPrefixItem(std::vector<ITEMData> &vecPrefixItem)
{
if(!m_bInitial) // 未初始化,直接返回
{
return -1;
}
ITEMData item;
PCEPROPVAL pRecord = NULL;
PBYTE pString = NULL;
DWORD dwRecSize;
WORD wProps = 2;
//CEOID oid = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_BEGINNING,0,0,NULL);
CEOID oid = CeSeekDatabaseEx(m_hDB,m_iSeekOrder,0,0,NULL);
while(oid)
{
oid = CeReadRecordPropsEx(m_hDB, CEDB_ALLOWREALLOC,&wProps,NULL,(LPBYTE *)&pString,&dwRecSize,NULL);
if(0!=oid)
{
pRecord = (PCEPROPVAL) pString;
memset(&item,0,sizeof(ITEMData));
item.ceoid = oid;
for(int i = 0; i<wProps; i++)
{
switch(pRecord[i].propid)
{
case NamePropid:
wcscpy(item.name,pRecord[i].val.lpwstr);
break;
case PhoneNumberPropid:
wcscpy(item.number,pRecord[i].val.lpwstr);
break;
default:
break;
}
}
vecPrefixItem.push_back(item);
}
LocalFree(pString);
pString = NULL;
}
return 0;
}
CEOID CSysDB::BeginRead(CEOID *pOid)
{
if(!m_bInitial) // 未初始化,直接返回
{
return -1;
}
CEOID oid = CeSeekDatabaseEx(m_hDB,m_iSeekOrder,0,0,NULL);
*pOid = oid;
return oid;
}
//void *CSysDB::ReadNextRecord(void *pData , int cbData)
void* CSysDB::ReadNextRecord(CEOID *pOid , void *pData)
{
PCEPROPVAL pRecord = NULL;
PBYTE pString = NULL;
DWORD dwRecSize;
WORD wProps = 1;
CEOID oid = CeReadRecordPropsEx(m_hDB, CEDB_ALLOWREALLOC,&wProps,NULL,(LPBYTE *)&pString,&dwRecSize,NULL);
if(0!=oid)
{
pRecord = (PCEPROPVAL) pString;
//memset(&item,0,sizeof(ITEMData));
//item.ceoid = oid;
for(int i = 0; i<wProps; i++)
{
switch(pRecord[i].propid)
{
case StreamDataPropid:
//memcpy(&item , pRecord[i].val.blob.lpb, pRecord[i].val.blob.dwCount );
memcpy(pData , pRecord[i].val.blob.lpb, pRecord[i].val.blob.dwCount );
//wcscpy(item.name,pRecord[i].val.blob.lpb);
break;
// case PhoneNumberPropid:
// wcscpy(item.number,pRecord[i].val.lpwstr);
// break;
default:
break;
}
}
//vecPrefixItem.push_back(item);
}
LocalFree(pString);
pString = NULL;
*pOid = oid;
if(oid == 0)
return NULL;
return pData;
}
DWORD CSysDB::GetAllStreamItem(std::vector<ITEMData> &vecPrefixItem)
{
if(!m_bInitial) // 未初始化,直接返回
{
return -1;
}
ITEMData item;
PCEPROPVAL pRecord = NULL;
PBYTE pString = NULL;
DWORD dwRecSize;
WORD wProps = 1;
//CEOID oid = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_BEGINNING,0,0,NULL);
CEOID oid = CeSeekDatabaseEx(m_hDB,m_iSeekOrder,0,0,NULL);
while(oid)
{
oid = CeReadRecordPropsEx(m_hDB, CEDB_ALLOWREALLOC,&wProps,NULL,(LPBYTE *)&pString,&dwRecSize,NULL);
if(0!=oid)
{
pRecord = (PCEPROPVAL) pString;
memset(&item,0,sizeof(ITEMData));
item.ceoid = oid;
for(int i = 0; i<wProps; i++)
{
switch(pRecord[i].propid)
{
case StreamDataPropid:
memcpy(&item , pRecord[i].val.blob.lpb, pRecord[i].val.blob.dwCount );
//wcscpy(item.name,pRecord[i].val.blob.lpb);
break;
// case PhoneNumberPropid:
// wcscpy(item.number,pRecord[i].val.lpwstr);
// break;
default:
break;
}
}
vecPrefixItem.push_back(item);
}
LocalFree(pString);
pString = NULL;
}
return 0;
}
DWORD CSysDB::GetPrefixItemCount()
{
if ( m_bInitial)
{
BY_HANDLE_DB_INFORMATION dbInfo;
dbInfo.wVersion = BY_HANDLE_DB_INFORMATION_VERSION;
if(CeGetDBInformationByHandle(m_hDB,&dbInfo))
{
return dbInfo.infDatabase.dwNumRecords;
}
}
return 0;
}
DWORD CSysDB::GetDBItemCount()
{
if ( m_bInitial)
{
BY_HANDLE_DB_INFORMATION dbInfo;
dbInfo.wVersion = BY_HANDLE_DB_INFORMATION_VERSION;
if(CeGetDBInformationByHandle(m_hDB,&dbInfo))
{
return dbInfo.infDatabase.dwNumRecords;
}
}
return 0;
}
BOOL CSysDB::IsPrefixItemExist(ITEMData &item)
{
BOOL rs = FALSE;
if(m_bInitial) // 先判断已经初始化
{
ITEMData tempItem;
PCEPROPVAL pRecord = NULL;
PBYTE pString = NULL;
DWORD dwRecSize;
WORD wProps = 2;
//CEOID oid = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_BEGINNING,0,0,NULL);
CEOID oid = CeSeekDatabaseEx(m_hDB,m_iSeekOrder,0,0,NULL);
while(oid)
{
oid = CeReadRecordPropsEx(m_hDB, CEDB_ALLOWREALLOC,&wProps,NULL,(LPBYTE *)&pString,&dwRecSize,NULL);
if(0!=oid)
{
pRecord = (PCEPROPVAL) pString;
memset(&tempItem,0,sizeof(ITEMData));
tempItem.ceoid = oid;
for(int i = 0; i<wProps; i++)
{
switch(pRecord[i].propid)
{
case NamePropid:
wcscpy(tempItem.name,pRecord[i].val.lpwstr);
break;
case PhoneNumberPropid:
wcscpy(tempItem.number,pRecord[i].val.lpwstr);
break;
default:
break;
}
}
if( 0 == wcscmp(tempItem.number,item.number)) // 号码相等,找到了
{
item.ceoid = tempItem.ceoid;
wcscpy(item.name,tempItem.name);
rs = TRUE;
}
}
LocalFree(pString);
pString = NULL;
if(rs)
break;
}
}
return rs;
}
DWORD CSysDB::GetMaxPrefixOrderID()
{
DWORD MaxOrderID = 0;
if(!m_bInitial) // 未初始化,直接返回
{
return 0;
}
PCEPROPVAL pRecord = NULL;
PBYTE pString = NULL;
DWORD dwRecSize;
WORD wProps = 1;
CEPROPID propID = OrderPropid;
// 数据库按照排序ID降序排列,最大ID位于数据库第一条记录
//CEOID oid = CeSeekDatabaseEx(m_hDB,CEDB_SEEK_BEGINNING,0,0,NULL);
CEOID oid = CeSeekDatabaseEx(m_hDB,m_iSeekOrder,0,0,NULL);
if(oid)
{
oid = CeReadRecordPropsEx(m_hDB, CEDB_ALLOWREALLOC,&wProps,&propID,(LPBYTE *)&pString,&dwRecSize,NULL);
if(0!=oid)
{
pRecord = (PCEPROPVAL) pString;
if(pRecord[0].propid == OrderPropid)
{
MaxOrderID = pRecord[0].val.ulVal;
}
}
LocalFree(pString);
pString = NULL;
}
return MaxOrderID;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -