wince存储对象问题,急(100分)

zcwhgj 2006-05-20 01:25:50
//这是写入数据时的方式,写入是成功的.
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;
}
}
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zcwhgj 2006-05-25
  • 打赏
  • 举报
回复
兄弟,虽然不是你说的哪样,但还是要谢谢你.分全给你.
无聊客 2006-05-22
  • 打赏
  • 举报
回复
seek时使用,ceoid是openDatabaseEx返回的,
prgPropVal[0].propid = MAKELONG( CEVT_LPWSTR, 0 );
你可以这样试下
zcwhgj 2006-05-22
  • 打赏
  • 举报
回复
这位朋友说的没错,但是openDatabase时哪一个值是呢是ceoid吗?
另外你这一句:prgPropVal[0].propid = MAKELONG( CEVT_LPWSTR, propid );
是在save时还是在seek时用?
我试了在seek时用open返回的CEOID值都不对.

先谢谢你先.
无聊客 2006-05-22
  • 打赏
  • 举报
回复
propid
Identifier of the property value. The high-order word is an application-defined identifier, and the low-order word is a predefined constant value that indicates the data type of the value specified by the val member. The low-order word can be one of the following values. Value Description
CEVT_BLOB A CEBLOB structure.
CEVT_BOOL A Boolean value.
CEVT_FILETIME A FILETIME structure.
CEVT_I2 A 16-bit signed integer.
CEVT_I4 A 32-bit signed integer.
CEVT_LPWSTR A null-terminated string.
CEVT_R8 A 64-bit signed interger.
CEVT_UI2 A 16-bit unsigned integer.
CEVT_UI4 A 32-bit unsigned integer.

所以应该这么置:
prgPropVal[0].propid = MAKELONG( CEVT_LPWSTR, propid );
//propid是Open时获的

这样试试看

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧