7,655
社区成员
发帖
与我相关
我的任务
分享
#ifndef EDB
#define EDB
#endif
extern "C"
{
#include <Windbase_edb.h>
};
#define VOLUME_PATH _T("mydb.db")
#define MAKEPROP(n,t) ((n<<16)|CEVT_##t)
#define PROPID_MASK 0x0000FFFF
#define PROPID_NAME MAKEPROP(101,LPWSTR)
#define PROPID_DESCRIPTION MAKEPROP(102,LPWSTR)
#define PROPID_ID MAKEPROP(103,LPWSTR)
#define PROPID_REMARK MAKEPROP(104,LPWSTR)
BOOL CreateDataBase()
{
BOOL ret = FALSE;
CEGUID guid ;
CEOID oid;
HANDLE hd = NULL;
CEDBASEINFOEX info =
{
2,
0,
(CEDB_VALIDNAME | CEDB_VALIDTYPE | CEDB_VALIDSORTSPEC),
_T("Table1"),
0x777,
4,
0,
{0,},
};
CEPROPSPEC CEPropSpec[4];
CEPropSpec[0].wVersion = 1;
CEPropSpec[0].propid = PROPID_NAME;
CEPropSpec[0].dwFlags = 0;
CEPropSpec[0].pwszPropName = TEXT("FileName");
CEPropSpec[0].cchPropName = CEDB_MAXDBASENAMELEN;
CEPropSpec[1].wVersion = 1;
CEPropSpec[1].propid = PROPID_DESCRIPTION;
CEPropSpec[1].dwFlags = 0;
CEPropSpec[1].pwszPropName = TEXT("Description");
CEPropSpec[1].cchPropName = CEDB_MAXDBASENAMELEN;
CEPropSpec[2].wVersion = 1;
CEPropSpec[2].propid = PROPID_ID;
CEPropSpec[2].dwFlags = 0;
CEPropSpec[2].pwszPropName = TEXT("ID");
CEPropSpec[2].cchPropName = CEDB_MAXDBASENAMELEN;
CEPropSpec[3].wVersion = 1;
CEPropSpec[3].propid = PROPID_REMARK;
CEPropSpec[3].dwFlags = 0;
CEPropSpec[3].pwszPropName = TEXT("Remark");
CEPropSpec[3].cchPropName = CEDB_MAXDBASENAMELEN;
ret = CeMountDBVolEx(&guid, VOLUME_PATH, NULL, CREATE_ALWAYS);
if(ret == FALSE)
{
return FALSE;
}
if((oid = CeCreateDatabaseWithProps(&guid, &info, 0, CEPropSpec)) == NULL)
{
CeUnmountDBVol(&guid);
return FALSE;
}
if((hd = CeOpenDatabaseInSession(NULL, &guid, &oid, NULL, NULL, 0, NULL)) == INVALID_HANDLE_VALUE)
{
CeUnmountDBVol(&guid);
return FALSE;
}
CEPROPVAL pProp[4];
pProp[0].propid = PROPID_NAME;
pProp[0].wFlags = 0;
pProp[0].val.lpwstr = L"ABC";
pProp[1].propid = PROPID_DESCRIPTION;
pProp[1].wFlags = 0;
pProp[1].val.lpwstr = L"DEF";
pProp[2].propid = PROPID_ID;
pProp[2].wFlags = 0;
pProp[2].val.lpwstr = L"GHI";
pProp[3].propid = PROPID_REMARK;
pProp[3].wFlags = 0;
pProp[3].val.lpwstr = L"JKL";
for(int i = 0; i < 16; i++)
{
oid = CeWriteRecordProps(hd, 0, 4, pProp);
}
CeFlushDBVol(&guid);
CloseHandle(hd);
CeUnmountDBVol(&guid);
return TRUE;
}
BOOL ReadDataBase()
{
HANDLE hd = NULL;
CEGUID guid;
CEOID oid = 0;
BOOL ret = FALSE;
if((ret = CeMountDBVolEx(&guid, VOLUME_PATH, NULL, OPEN_EXISTING)) == FALSE)
{
return FALSE;
}
if((hd = CeOpenDatabaseInSession(NULL, &guid, &oid, _T("Table1"), NULL,
CEDB_AUTOINCREMENT, NULL)) == INVALID_HANDLE_VALUE)
{
DWORD err;
err = GetLastError();
if(err == ERROR_FILE_NOT_FOUND)
CeUnmountDBVol(&guid);
return FALSE;
}
WORD dwPropId = 0;
DWORD dwSizeOfBuffer = 512;
CEOID ceoidFindRecord = 0;
LPBYTE lpRecProps = NULL;
PCEPROPVAL pCePropVal = NULL;
int count = 0;
oid = CeSeekDatabaseEx(hd, CEDB_SEEK_BEGINNING, 0, 0, NULL);
while(ceoidFindRecord = CeReadRecordPropsEx(hd, CEDB_ALLOWREALLOC,
&dwPropId, NULL, &lpRecProps, &dwSizeOfBuffer, NULL))
{
if(GetLastError() != ERROR_NO_MORE_ITEMS)
{
count++;
pCePropVal = (PCEPROPVAL)lpRecProps;
LPWSTR lpnum;
lpnum = pCePropVal[0].val.lpwstr;
lpnum = pCePropVal[1].val.lpwstr;
lpnum = pCePropVal[2].val.lpwstr;
lpnum = pCePropVal[3].val.lpwstr;
}
}
if(lpRecProps)
{
LocalFree(lpRecProps);
lpRecProps = NULL;
}
CloseHandle(hd);
CeUnmountDBVol(&guid);
return TRUE;
}