wince存储对象问题,急(100分)
//这是写入数据时的方式,写入是成功的.
int CDataBase::SaveNameValue(CString name,CString value){
if(hDataBase==INVALID_HANDLE_VALUE||nDataStatu==0)return 0;
CEPROPVAL *prgPropVal = new CEPROPVAL[2];
ZeroMemory(prgPropVal, sizeof(CEPROPVAL[2]));
prgPropVal[0].propid = MAKELONG(CEVT_LPWSTR, 1);
prgPropVal[0].val.lpwstr = name.LockBuffer();
prgPropVal[1].propid = MAKELONG(CEVT_LPWSTR, 2);
prgPropVal[1].val.lpwstr = value.LockBuffer();
name.UnlockBuffer();
value.UnlockBuffer();
CEOID oldId = CeWriteRecordProps(
hDataBase, // handle to database
oldId, // Create new record
2, // five properties
prgPropVal); // propval structure
delete prgPropVal;
// return true/false based on resultant value
if(oldId)
return true;
else
return false;
}
//这是进行获取时的代码,可是在CeSeekDatabase查找时,老是找不到,且给出的错误提示是:87.也就是参数错误的提示,可不知道这个参数如何错误了,我想主要是CEPROPVAL结构的构造问题.不知道哪位朋友能帮我呢?
int CDataBase::GetValueByName(CString name,CString& value){
if(hDataBase==INVALID_HANDLE_VALUE||nDataStatu==0)return 0;
CEPROPVAL* prgPropVal = new CEPROPVAL[1];
ZeroMemory(prgPropVal, sizeof(CEPROPVAL[1]));
prgPropVal[0].propid = MAKELONG(CEVT_LPWSTR, 1);
prgPropVal[0].val.lpwstr = name.LockBuffer();
name.UnlockBuffer();
int dwIndex;
CEOID oldId =CeSeekDatabase(hDataBase, CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)prgPropVal, &dwIndex);
if(!oldId){
TCHAR szError[100];
wsprintf (szError,
TEXT("ERROR:CEDB_SEEK_VALUEFIRSTEQUAL failed (%ld)"),
GetLastError ());
TRACE((CString)szError+L"\r\n");
return 0;
}
BYTE *prgBuffer = NULL;
DWORD dwBuffer = 0;
WORD wPropId = 0;
oldId = CeReadRecordPropsEx(
hDataBase, // handle to database
CEDB_ALLOWREALLOC, // flags
&wPropId, // read all properties//会返回指针数组的下标数.
NULL, // read all properties
&prgBuffer, // pointer to buffer
&dwBuffer, // sizeof buffer
NULL); // parameter not meaningful
if(oldId)
{
CEPROPVAL *pre =(CEPROPVAL *)prgBuffer;
value =(CString)((pre[1]).val.lpwstr);
delete prgBuffer;
delete prgPropVal;
return true;
}
else
{
delete prgBuffer;
delete prgPropVal;
return false;
}
}