⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysedb.cpp

📁 Windows Mobile 5.0/6.0下EDB的使用的完整的例子程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	//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 + -