www.pudn.com > StreamDBTest.rar > SysEDB.cpp


#include "stdafx.h" 
#include "SysEDB.h" 
 
const CEPROPID NamePropid = MAKELONG(CEVT_LPWSTR,0);			// 名字propid 
const CEPROPID PhoneNumberPropid = MAKELONG(CEVT_LPWSTR,1);			// 号码propid 
const CEPROPID OrderPropid = MAKELONG(CEVT_UI4,0);				// 排序的序号propid 
 
const CEPROPID StreamDataPropid = MAKELONG(CEVT_BLOB,0);				// Item结构的propid 
 
UINT GetCurrAppFolder(TCHAR* appFolder) 
{ 
	TCHAR lpFileName[128]; 
	TCHAR lpFolderName[128]; 
	TCHAR k='\\'; 
	int charNumber=GetModuleFileName(NULL, lpFileName, 128); 
	for(int i=charNumber-1;i>=0;i--) 
	{ 
		if(lpFileName[i]==k) 
		{ 
			wcsncpy(lpFolderName,lpFileName,i+1); 
			lpFolderName[i+1]='\0'; 
			break; 
		} 
	} 
 
	return wsprintf(appFolder,TEXT("%s"),lpFolderName); 
} 
 
//创建数据库 
BOOL CSysDB::CreateDBEx(LPTSTR apsDBVolPath) 
{ 
	CEGUID ceGuidInitDB; 
 
	if(FALSE == CeMountDBVolEx(&ceGuidInitDB, apsDBVolPath, 0, OPEN_ALWAYS )) 
	{         
		return FALSE; 
	} 
 
	CEDBASEINFOEX ced; 
	memset(&ced, 0, sizeof(CEDBASEINFOEX)) ; 
	ced.wVersion = CEDBASEINFOEX_VERSION; 
	ced.dwSize = sizeof(CEDBASEINFOEX); 
	ced.dwFlags = CEDB_VALIDNAME|  CEDB_VALIDSORTSPEC;  
 
	//wcscpy(ced.szDbaseName, L"Prefix"); // 数据库的名字 
	wcscpy(ced.szDbaseName, DB_NAME); // 数据库的名字 
	//ced.wNumSortOrder = 2;	// 1种排序方式 
	ced.wNumSortOrder = 1;	// 1种排序方式 
 
	// 排序方式,把电话号码做为主键,不允许重复。 
	ced.rgSortSpecs[0].wVersion = SORTORDERSPECEX_VERSION; 
	ced.rgSortSpecs[0].wNumProps = 1; 
	if(m_bSetPrimaryKey) 
		ced.rgSortSpecs[0].wKeyFlags = CEDB_SORT_PRIMARYKEY; 
	else 
		ced.rgSortSpecs[0].wKeyFlags = 0 ; 
 
	ced.rgSortSpecs[0].rgPropID[0] = PhoneNumberPropid; // 默认升序排列 
 
	DWORD wProps = 2; 
	CEPROPSPEC propSpec[2]; 
	memset(propSpec,0,sizeof(CEPROPSPEC)*wProps);	 
 
	propSpec[0].wVersion = 1; 
	propSpec[0].propid = NamePropid; 
	propSpec[0].dwFlags = DB_PROP_NOTNULL; 
 
	propSpec[1].wVersion = 1; 
	propSpec[1].propid = PhoneNumberPropid; 
	propSpec[1].dwFlags = DB_PROP_NOTNULL; 
 
	//	propSpec[2].wVersion = 1; 
	//	propSpec[2].propid = OrderPropid; 
	//	propSpec[2].dwFlags = DB_PROP_NOTNULL; 
 
	CEOID oid = CeCreateDatabaseWithProps(&ceGuidInitDB,&ced,wProps,propSpec); 
	if( NULL ==oid ) 
	{ 
		CeUnmountDBVol(&ceGuidInitDB); 
		return FALSE; 
	} 
	CeUnmountDBVol(&ceGuidInitDB); 
	return TRUE; 
} 
 
//创建流数据库 
BOOL CSysDB::CreateStreamDB(LPTSTR apsDBVolPath) 
{ 
	CEGUID ceGuidInitDB; 
 
	if(FALSE == CeMountDBVolEx(&ceGuidInitDB, apsDBVolPath, 0, OPEN_ALWAYS )) 
	{         
		return FALSE; 
	} 
 
	CEDBASEINFOEX ced; 
	memset(&ced, 0, sizeof(CEDBASEINFOEX)) ; 
	ced.wVersion = CEDBASEINFOEX_VERSION; 
	ced.dwSize = sizeof(CEDBASEINFOEX); 
	ced.dwFlags = CEDB_VALIDNAME|  CEDB_VALIDSORTSPEC;  
 
	//wcscpy(ced.szDbaseName, L"Prefix"); // 数据库的名字 
	wcscpy(ced.szDbaseName, STREAM_DB_NAME); // 数据库的名字 
	//ced.wNumSortOrder = 2;	// 1种排序方式 
	ced.wNumSortOrder = 1;	// 1种排序方式 
 
	// 排序方式,把电话号码做为主键,不允许重复。 
	ced.rgSortSpecs[0].wVersion = SORTORDERSPECEX_VERSION; 
	ced.rgSortSpecs[0].wNumProps = 1; 
//	if(m_bSetPrimaryKey) 
//		ced.rgSortSpecs[0].wKeyFlags = CEDB_SORT_PRIMARYKEY; 
//	else 
		ced.rgSortSpecs[0].wKeyFlags = 0 ; 
 
	ced.rgSortSpecs[0].rgPropID[0] = StreamDataPropid; // 默认升序排列 
 
	DWORD wProps = 1; 
	CEPROPSPEC propSpec[1]; 
	memset(propSpec,0,sizeof(CEPROPSPEC)*wProps);	 
 
	propSpec[0].wVersion = 1; 
	propSpec[0].propid = StreamDataPropid; 
	propSpec[0].dwFlags = DB_PROP_NOTNULL; 
 
//	propSpec[1].wVersion = 1; 
//	propSpec[1].propid = PhoneNumberPropid; 
//	propSpec[1].dwFlags = DB_PROP_NOTNULL; 
 
	//	propSpec[2].wVersion = 1; 
	//	propSpec[2].propid = OrderPropid; 
	//	propSpec[2].dwFlags = DB_PROP_NOTNULL; 
 
	CEOID oid = CeCreateDatabaseWithProps(&ceGuidInitDB,&ced,wProps,propSpec); 
	if( NULL ==oid ) 
	{ 
		CeUnmountDBVol(&ceGuidInitDB); 
		return FALSE; 
	} 
	CeUnmountDBVol(&ceGuidInitDB); 
	return TRUE; 
} 
 
 
/* 
// 创建存储拨号前缀的数据库 
BOOL CreateDB(LPTSTR apsDBVolPath) 
{ 
	CEGUID ceGuidInitDB; 
 
	if(FALSE == CeMountDBVolEx(&ceGuidInitDB, apsDBVolPath, 0, OPEN_ALWAYS )) 
	{         
		return FALSE; 
	} 
 
	CEDBASEINFOEX ced; 
	memset(&ced, 0, sizeof(CEDBASEINFOEX)) ; 
	ced.wVersion = CEDBASEINFOEX_VERSION; 
	ced.dwSize = sizeof(CEDBASEINFOEX); 
	ced.dwFlags = CEDB_VALIDNAME|  CEDB_VALIDSORTSPEC;  
 
	//wcscpy(ced.szDbaseName, L"Prefix"); // 数据库的名字 
	wcscpy(ced.szDbaseName, DB_NAME); // 数据库的名字 
	//ced.wNumSortOrder = 2;	// 1种排序方式 
	ced.wNumSortOrder = 1;	// 1种排序方式 
 
	// 排序方式,把电话号码做为主键,不允许重复。 
	ced.rgSortSpecs[0].wVersion = SORTORDERSPECEX_VERSION; 
	ced.rgSortSpecs[0].wNumProps = 1;	 
	ced.rgSortSpecs[0].wKeyFlags = CEDB_SORT_PRIMARYKEY ; 
	ced.rgSortSpecs[0].rgPropID[0] = PhoneNumberPropid; // 默认升序排列 
 
 
	 
	// 排序方式2,把OrderID按照降序排序 
//	ced.rgSortSpecs[1].wVersion = SORTORDERSPECEX_VERSION; 
//	ced.rgSortSpecs[1].wNumProps = 1;	 
//	ced.rgSortSpecs[1].wKeyFlags =CEDB_SORT_UNIQUE; 
//	ced.rgSortSpecs[1].rgPropID[0] = OrderPropid;  
//	ced.rgSortSpecs[1].rgdwFlags[0] = CEDB_SORT_DESCENDING;  // 降序排列 
	 
	// 设置每个字段的属性值 
	//	DWORD wProps = 3; 
	//	CEPROPSPEC propSpec[3]; 
	//	memset(propSpec,0,sizeof(CEPROPSPEC)*wProps);	 
 
	DWORD wProps = 2; 
	CEPROPSPEC propSpec[2]; 
	memset(propSpec,0,sizeof(CEPROPSPEC)*wProps);	 
 
	propSpec[0].wVersion = 1; 
	propSpec[0].propid = NamePropid; 
	propSpec[0].dwFlags = DB_PROP_NOTNULL; 
 
	propSpec[1].wVersion = 1; 
	propSpec[1].propid = PhoneNumberPropid; 
	propSpec[1].dwFlags = DB_PROP_NOTNULL; 
 
	//	propSpec[2].wVersion = 1; 
	//	propSpec[2].propid = OrderPropid; 
	//	propSpec[2].dwFlags = DB_PROP_NOTNULL; 
 
	CEOID oid = CeCreateDatabaseWithProps(&ceGuidInitDB,&ced,wProps,propSpec); 
	if( NULL ==oid ) 
	{ 
		CeUnmountDBVol(&ceGuidInitDB); 
		return FALSE; 
	} 
	else	// 至此数据库成功创建 
	{ 
		// 创建预设分组 
		HANDLE hDB =  CeOpenDatabaseInSession(NULL,&ceGuidInitDB,&oid,NULL,NULL,CEDB_AUTOINCREMENT,NULL); 
		if(hDB != INVALID_HANDLE_VALUE) 
		{		 
			WORD wProps = 3; 
			CEPROPVAL propVal[3]; 
			memset(propVal,0,sizeof(CEPROPVAL)*3); 
 
			propVal[0].propid = NamePropid; 
			propVal[1].propid = PhoneNumberPropid; 
			propVal[2].propid = OrderPropid; 
 
			propVal[0].val.lpwstr = L"Voice Modulation";	 
			propVal[1].val.lpwstr = L"*77"; 
			propVal[2].val.ulVal = 1; 
			CeWriteRecordProps(hDB,0,wProps,propVal);  
 
			propVal[0].val.lpwstr = L"Voice SMS"; 
			propVal[1].val.lpwstr = L"*88";		 
			propVal[2].val.ulVal = 2; 
			CeWriteRecordProps(hDB,0,wProps,propVal);  
 
			propVal[0].val.lpwstr = L"Voice Music SMS"; 
			propVal[1].val.lpwstr = L"*89";		 
			propVal[2].val.ulVal = 3; 
			CeWriteRecordProps(hDB,0,wProps,propVal);  
			 
			CloseHandle(hDB); 
		} 
 
	} 
	CeUnmountDBVol(&ceGuidInitDB); 
	return TRUE; 
} 
*/ 
 
CSysDB::CSysDB(BOOL bSetPrimarykey , LONG iSeekOrder) 
{ 
	m_bInitial = FALSE; 
	m_hDB = INVALID_HANDLE_VALUE; 
	m_dwMaxPrefixOrderID = 0; 
	m_iSeekOrder = iSeekOrder; 
	m_bSetPrimaryKey = bSetPrimarykey; 
	//Initial(); // 初始化 
} 
 
CSysDB::~CSysDB() 
{ 
	if(INVALID_HANDLE_VALUE != m_hDB)	// 关闭打开的数据库 
	{ 
		CloseHandle(m_hDB); 
	}	 
	CeUnmountDBVol(&m_ceGuidDB); // 卸载数据库卷 
} 
 
 
BOOL CSysDB::OpenDB(TCHAR *szwDBName) 
{ 
	if(m_bInitial)	// 已经初始化 
	{ 
		return TRUE; // 返回TRUE 
	} 
 
	TCHAR path[256]; 
	TCHAR dbPath[256]; 
	GetCurrAppFolder(path); 
	//wsprintf(dbPath,L"%s\\%s",path,L"db5.vol"); 
	//wsprintf(dbPath,L"%s\\%s",path,L"SmsBList.dat"); 
	wsprintf(dbPath,L"%s\\%s",path,szwDBName); 
 
 
	//if( CeMountDBVolEx(&m_ceGuidDB, dbPath, 0, OPEN_EXISTING )) 
	//if( CeMountDBVolEx(&m_ceGuidDB, dbPath, 0, OPEN_EXISTING )) 
	if(!CeMountDBVolEx(&m_ceGuidDB, dbPath, 0, OPEN_EXISTING )) 
	{ 
		CreateDBEx(dbPath); 
		if(!CeMountDBVolEx(&m_ceGuidDB, dbPath, 0, OPEN_EXISTING )) 
			return FALSE; 
	} 
	{ 
		CEOID oidb = 0;	 
 
		/*		SORTORDERSPECEX sort; 
		memset(&sort,0,sizeof(SORTORDERSPECEX)); 
		// 排序方式2,把OrderID按照降序排序 
		sort.wVersion = SORTORDERSPECEX_VERSION; 
		sort.wNumProps = 1;	 
		sort.wKeyFlags =CEDB_SORT_UNIQUE; 
		sort.rgPropID[0] = OrderPropid;  
		sort.rgdwFlags[0] = CEDB_SORT_DESCENDING;  // 降序排列 
		*/ 
 
		oidb = 0; 
		//m_hDB = CeOpenDatabaseInSession(NULL,&m_ceGuidDB,&oidb,L"Prefix",&sort,CEDB_AUTOINCREMENT,NULL); 
		//m_hDB = CeOpenDatabaseInSession(NULL,&m_ceGuidDB,&oidb, DB_NAME,&sort,CEDB_AUTOINCREMENT,NULL); 
		m_hDB = CeOpenDatabaseInSession(NULL,&m_ceGuidDB,&oidb, DB_NAME,NULL,CEDB_AUTOINCREMENT,NULL); 
 
		if(INVALID_HANDLE_VALUE != m_hDB ) // 成功打开数据库 
		{ 
			m_bInitial =TRUE; 
			m_dwMaxPrefixOrderID = GetMaxPrefixOrderID(); 
			return TRUE; 
		} 
 
		CeUnmountDBVol(&m_ceGuidDB); 
	} 
 
	return FALSE; 
} 
 
BOOL CSysDB::OpenStreamDB(TCHAR *szwDBName) 
{ 
	if(m_bInitial)	// 已经初始化 
	{ 
		return TRUE; // 返回TRUE 
	} 
 
	TCHAR path[256]; 
	TCHAR dbPath[256]; 
	GetCurrAppFolder(path); 
	//wsprintf(dbPath,L"%s\\%s",path,L"db5.vol"); 
	//wsprintf(dbPath,L"%s\\%s",path,L"SmsBList.dat"); 
	wsprintf(dbPath,L"%s\\%s",path,szwDBName); 
 
 
	//if( CeMountDBVolEx(&m_ceGuidDB, dbPath, 0, OPEN_EXISTING )) 
	//if( CeMountDBVolEx(&m_ceGuidDB, dbPath, 0, OPEN_EXISTING )) 
	if(!CeMountDBVolEx(&m_ceGuidDB, dbPath, 0, OPEN_EXISTING )) 
	{ 
		CreateStreamDB(dbPath); 
		if(!CeMountDBVolEx(&m_ceGuidDB, dbPath, 0, OPEN_EXISTING )) 
			return FALSE; 
	} 
	{ 
		CEOID oidb = 0;	 
 
		/*		SORTORDERSPECEX sort; 
		memset(&sort,0,sizeof(SORTORDERSPECEX)); 
		// 排序方式2,把OrderID按照降序排序 
		sort.wVersion = SORTORDERSPECEX_VERSION; 
		sort.wNumProps = 1;	 
		sort.wKeyFlags =CEDB_SORT_UNIQUE; 
		sort.rgPropID[0] = OrderPropid;  
		sort.rgdwFlags[0] = CEDB_SORT_DESCENDING;  // 降序排列 
		*/ 
 
		oidb = 0; 
		//m_hDB = CeOpenDatabaseInSession(NULL,&m_ceGuidDB,&oidb,L"Prefix",&sort,CEDB_AUTOINCREMENT,NULL); 
		//m_hDB = CeOpenDatabaseInSession(NULL,&m_ceGuidDB,&oidb, DB_NAME,&sort,CEDB_AUTOINCREMENT,NULL); 
		m_hDB = CeOpenDatabaseInSession(NULL,&m_ceGuidDB,&oidb, STREAM_DB_NAME,NULL,CEDB_AUTOINCREMENT,NULL); 
 
		if(INVALID_HANDLE_VALUE != m_hDB ) // 成功打开数据库 
		{ 
			m_bInitial =TRUE; 
			//m_dwMaxPrefixOrderID = GetMaxPrefixOrderID(); 
			return TRUE; 
		} 
 
		CeUnmountDBVol(&m_ceGuidDB); 
	} 
 
	return FALSE; 
} 
 
 
 
void CSysDB::CloseDBHandle() 
{ 
	if(INVALID_HANDLE_VALUE != m_hDB)	// 关闭打开的数据库 
	{ 
		CloseHandle(m_hDB); 
		m_hDB = INVALID_HANDLE_VALUE; 
	}	 
	CeUnmountDBVol(&m_ceGuidDB); // 卸载数据库卷 
	m_bInitial = FALSE;	// 初始化开关设为false 
} 
 
 
DWORD CSysDB::AddDBItem(ITEMData &item) 
{ 
	//BOOL rs = FALSE; 
	if(!m_bInitial)	// 没有初始化 
	{ 
		return FALSE; //  返回false 
	} 
 
	//WORD wProps = 3; 
	//CEPROPVAL propVal[3]; 
	//memset(propVal,0,sizeof(CEPROPVAL)*3); 
	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; 
 
	//	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(ITEMData &item) 
{ 
	//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 &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 &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