#ifndef EDB
#define EDB //Seven: WM6 we have define this macro,2008-08-14
#endif
#include <Windows.h>
#include <winbase.h>
#include <bldver.h>
#include <rapi.h>
#include <windbase.h>
#ifndef EDB
#include <windbase_edb.h>
#endif
//#define BACK_VOLUMN_FILE
//#define DEBUG_OUTPUT
#define TRACE_OUTPUT
#define ERROR_OUTPUT
#ifdef DEBUG_OUTPUT
#define EDB_DEBUG printf
#else
#define EDB_DEBUG
#endif
#ifdef TRACE_OUTPUT
#define EDB_TRACE printf
#else
#define EDB_TRACE
#endif
#ifdef ERROR_OUTPUT
#define EDB_ERROR printf
#else
#define EDB_ERROR
#endif
#define VOLFILE L"\\pim.vol"
//#define VOLFILE L"\\pim_back.vol"
#define VOLFILE_BACK L"\\pim_back.vol"
//#define VOLFILE_TEST L"seven.vol"
#define DBFILE L"clog.db"
#define DBFILE_TEST L"Seven.db"
#define MAX_NUM 100
#define MAX_PROPERTY 100 //1024
#define MAX_STRINGSIZE 100 //4000
#define NUM_DB_PROPS 3
#define PID_NO MAKELONG(CEVT_UI2,1)
#define PID_NAME MAKELONG(CEVT_LPWSTR,2)
#define PID_SALARY MAKELONG(CEVT_R8,3)
#define PID_BONUS MAKELONG(CEVT_R8,4)
#if 0
BOOL PIMBackUp()
{
CEGUID ceguidPim;
CEGUID ceguidPimBackUp;
//Initialisation
CREATE_INVALIDGUID(&ceguidPim);
CREATE_INVALIDGUID(&ceguidPimBackUp);
if(!CeMountDBVolEx(&ceguidPim, L"\\pim.vol", NULL, OPEN_EXISTING))
{
DWORD dwErro = GetLastError();
return FALSE;
}
if(!CeMountDBVolEx( &ceguidPimBackUp, L"\\pim_Backup.vol", NULL, CREATE_ALWAYS | EDB_MOUNT_FLAG))
{
return FALSE;
}
HANDLE hDBEnumHandle = INVALID_HANDLE_VALUE;
if((hDBEnumHandle = CeFindFirstDatabaseEx(&ceguidPim, 0)) == INVALID_HANDLE_VALUE)
{
return FALSE;
}
CEOID ceoidFind = 0;
while(ceoidFind = CeFindNextDatabaseEx(hDBEnumHandle, NULL))
{
HANDLE hSession = CeCreateSession(&ceguidPim);
HANDLE hDBOpened = INVALID_HANDLE_VALUE;
hDBOpened = CeOpenDatabaseInSession(
hSession,
&ceguidPim,
&ceoidFind,
NULL,
NULL,
CEDB_AUTOINCREMENT,
NULL);
if(hDBOpened == INVALID_HANDLE_VALUE)
{
DWORD error = GetLastError();
return FALSE;
}
// get informations
BY_HANDLE_DB_INFORMATION hDBOpenedInfo;
hDBOpenedInfo.wVersion = 2; //must be set to 2
if(!CeGetDBInformationByHandle(hDBOpened, &hDBOpenedInfo))
{
DWORD dwError = GetLastError();
return FALSE;
}
CEOIDINFOEX cdDb;
CEOID ceoidFindRecorde;
cdDb.wVersion = 2 ; //20080104-add
CeOidGetInfoEx2(&ceguidPim,ceoidFindRecorde, &cdDb);
// create a copy
CEOID ceoidDBaseCopy = 0;
CEPROPSPEC cepropspecBaseCopy;
cepropspecBaseCopy.wVersion=1;
if(!(ceoidDBaseCopy = CeCreateDatabaseWithProps(
&ceguidPimBackUp,
&hDBOpenedInfo.infDatabase,
0,
&cepropspecBaseCopy)))
{
DWORD dwErro = GetLastError();
return FALSE;
}
//open the copy
HANDLE hSession2 = CeCreateSession(&ceguidPimBackUp);
HANDLE hDBaseCopyHandle = INVALID_HANDLE_VALUE;
hDBaseCopyHandle = CeOpenDatabaseInSession(
hSession2,
&ceguidPimBackUp,
&ceoidDBaseCopy,
hDBOpenedInfo.infDatabase.szDbaseName,
NULL,
CEDB_AUTOINCREMENT,
NULL);
if(hDBaseCopyHandle == INVALID_HANDLE_VALUE)
{
return FALSE;
}
// get informations
BY_HANDLE_DB_INFORMATION hDBOpenedInfo2;
hDBOpenedInfo2.wVersion = 2;
if(!CeGetDBInformationByHandle(hDBaseCopyHandle, &hDBOpenedInfo2))
{
DWORD dwError = GetLastError();
return FALSE;
}
DWORD dwCpt = 0;
CEOID ceoidFindRecord = 0;
WORD dwPropId = 0;
CEPROPVAL* pBuffer = NULL;
CEPROPVAL cepropvalSeek;
DWORD dwSizeOfBuffer = 0;
HANDLE hHeap = NULL;
hHeap = GetProcessHeap();
if(hHeap == NULL)
return FALSE;
while(ceoidFindRecord = CeReadRecordPropsEx(
hDBOpened, // Handle of the database
CEDB_ALLOWREALLOC, // Use LocalAlloc to get the pBuffer
&dwPropId, // Number of properties retrieved
NULL, // NULL means retrieve all properties.
(LPBYTE*)&pBuffer, // pBuffer receives property data.
&dwSizeOfBuffer, // Handle to the heap for allocating the record when
// CEDB_ALLOWREALLOC is specified
hHeap)) // A handle to an application-created
dwCpt++;
if(GetLastError() != ERROR_NO_MORE_ITEMS)
return false;
free(pBuffer);
pBuffer = NULL;
CeSeekDatabaseEx(hDBOpened, CEDB_SEEK_BEGINNING, 0, 0, NULL);
ceoidFindRecord = 0;
DWORD dwNumberOfRecordFound = 0;
while(dwNumberOfRecordFound++ < dwCpt)
{
// Find record
ceoidFindRecord = CeReadRecordPropsEx(
hDBOpened, // Handle of the database.
CEDB_ALLOWREALLOC, // Use LocalAlloc to get the pBuffer.
&dwPropId, // Number of properties retrieved
NULL, // NULL means retrieve all properties.
(LPBYTE*)&pBuffer, // pBuffer receives property data.
&dwSizeOfBuffer, // Handle to the heap for allocating the record when
// CEDB_ALLOWREALLOC is specified.
hHeap); // A handle to an application-created
if(!ceoidFindRecord)
{
DWORD dwError = GetLastError();
return FALSE;
}
// Add property in backupDB
CEOID ceoidRecordAdd;
ceoidRecordAdd = CeWriteRecordProps(
hDBaseCopyHandle, // Handle to DB
0, // 0=> add new record
dwPropId, // propID
pBuffer); // BLOB pBuffer record
// pBuffer
if(!ceoidRecordAdd)
{
DWORD dwError = GetLastError();
MessageBox(0, L"Error", L"Error", 1);
return FALSE;
}
else
{
//MessageBox(0, L"Ok", L"Ok", 1);
}
//free(temp);
//temp = NULL;
free(pBuffer);
pBuffer = NULL;
}
}
if(!CeFlushDBVol(&ceguidPim))
return FALSE;
if(!CeFlushDBVol(&ceguidPimBackUp))
return FALSE;
if(!CeUnmountDBVol(&ceguidPim))
return FALSE;
if(!CeUnmountDBVol(&ceguidPimBackUp))
return FALSE;
return TRUE;
}
#endif
BOOL PIMVolRead(void)
{
int i=0,j=0,k=0,l=0,m=0;
//CEDBASEINFOEX
BOOL bResult = TRUE;
BOOL bIsMounted = FALSE;
CEGUID ceguidVolFile;
CEOID ceoidDB[MAX_NUM] = {0};
//CEOID ceoidFindRecorde;
CEOID ceoidFindRecord = 0, ceoidWriteRecord = 0;
//CEOID ceoidDBaseCopy = 0;
//CEOID ceoidRecordAdd;
//CEOIDINFOEX cdDb;
//WCHAR filename[MAX_NUM];
WCHAR buf[MAX_PROPERTY][MAX_STRINGSIZE] = {0};
//DWORD dwErro = 0;
DWORD dwOpenedIndex = 0;
//DWORD dwCpt = 0;
//WORD dwPropId = 0;
DWORD dwSizeOfBuffer = 0;
//DWORD dwNumberOfRecordFound = 0;
WORD cePropID=MAX_NUM;
WORD ceRecordPropID=MAX_NUM;
HANDLE hDBEnumHandle = INVALID_HANDLE_VALUE;
HANDLE hSession[MAX_NUM] = {INVALID_HANDLE_VALUE};
HANDLE hDBOpened[MAX_NUM] = {INVALID_HANDLE_VALUE};
//HANDLE hDBaseCopyHandle = INVALID_HANDLE_VALUE;
//HANDLE hSession2 = INVALID_HANDLE_VALUE;
HANDLE hHeap = NULL;
//BY_HANDLE_DB_INFORMATION hDBOpenedInfo2;
BY_HANDLE_DB_INFORMATION hDBOpenedInfo;
CEPROPSPEC cepropspecBaseCopy[MAX_NUM];
CEPROPVAL* pBuffer = NULL;
//CEPROPVAL cepropvalSeek;
#ifdef BACK_VOLUMN_FILE
BOOL bIsMounted_Back = FALSE;
CEGUID ceguidVolFile_Back;
CEOID ceoidDB_Back[MAX_NUM] = {0};
HANDLE hSession_Back[MAX_NUM] = {INVALID_HANDLE_VALUE};
HANDLE hDBOpened_Back[MAX_NUM] = {INVALID_HANDLE_VALUE};
CEPROPVAL PropVal[MAX_PROPERTY];
#endif
// 1, Initialisation
//CREATE_INVALIDGUID(&ceguidVolFile);
//CREATE_INVALIDGUID(&ceguidVolFile_Back);
memset(&ceguidVolFile, 0, sizeof(CEGUID));
#ifdef BACK_VOLUMN_FILE
memset(&ceguidVolFile_Back, 0, sizeof(CEGUID));
#endif
memset(buf,0,sizeof(buf));
//memset(hSession, INVALID_HANDLE_VALUE, sizeof(hSession));
//memset(hDBOpened, INVALID_HANDLE_VALUE, sizeof(hDBOpened));
// 2, Mount Vol
wince/WM EDB 应用程序参考实例
需积分: 3 59 浏览量
2008-10-28
22:57:27
上传
评论
收藏 21KB RAR 举报
Seven_zhangxw
- 粉丝: 38
- 资源: 3
最新资源
- 办工,日常生活中电脑中的磁盘清理功能,可以查找本机的指定大小文件,非常方便!
- cuda-使用cuda并行加速实现之gemv.zip
- cuda-使用cuda并行加速实现之softmax.zip
- 基于Opencv的车牌识别系统
- cuda-使用cuda并行加速实现之reduce.zip
- 基于Protel 99se 超级元件库电子器件芯片库原理图库2MB(810个)+PCB封装库10MB(1240个)合集.zip
- mmexport1713919112597.jpg
- cuda-使用cuda并行加速实现之kmeans聚类算法的实现.zip
- web-work-2024-4-24
- cuda-使用cuda并行加速实现之UpsampleNearest2D.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈