VC通过ADO操作ACCESS数据库备注类型

djh512 2012-07-17 05:19:08
首先存储备注类型,然后读出来,数据出了些问题

typedef struct {
char ftemplate[16384];
} FSDK_FaceTemplate;
FDSK_FaceTemplate faceTemplates;

FSDK_GetFaceTemplateInRegion(imageHandle, &facePosition, &faceTemplates); //此函数得到数据
//讲faceTemplates.ftemplate[]添加到数据库, 备注类型
m_pRecordset->AddNew();
m_pRecordset->PutCollect("faceName", _variant_t(userName));
m_pRecordset->PutCollect("faceTemplates", _variant_t(faceTemplates.ftemplate));
m_pRecordset->Update();

//读取的时候
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("faceName");
if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var);

var = m_pRecordset->GetCollect("faceTemplates");
if(var.vt != VT_NULL)
strTemplates = (LPCSTR)_bstr_t(var);

FSDK_FaceTemplate faceTemplate;
memset(faceTemplate.ftemplate, 0 , sizeof(faceTemplate.ftemplate));
strncpy(faceTemplate.ftemplate, strTemplates, sizeof(faceTemplate.ftemplate));
//对取出来的数据进行操作
m_pRecordset->MoveNext();
}

}


发现取出来的数据有些问题
不通过数据库操作得到结果没有问题
经过这个读写过程结果出了很大偏差

不知道这个过程哪出了问题,或者有没有其他的方法,请教给位了
...全文
163 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
启舰 2012-07-27
  • 打赏
  • 举报
回复
首先,你在写操作后,打开数据库看下,是否已经存进去,存进去的数值对不对,如果不对那就是你写操作有问题了,不过单从你putCollect(……),这几个操作上看,是没有问题的,还有就是在m_pRecordset->AddNew()之前要加上m_ptrRecordset-> CursorLocation = adUseClient;这条语句
如果存储的时候出了问题,你可以设置断点看一下,userName和faceTemplates.ftemplate的值是否正确

如果存存储的时候没有问题,那肯定就是取的时候存在问题了
你尝试一下,用usrname=var.bstr;将VAR的值赋给变量,不用强制转换(好像是bstr,有点记不大清了)
启舰 2012-07-27
  • 打赏
  • 举报
回复
strname=var.bstr;好像是bstr,你试下
不要用强制转换,把值赋给变量试下
djh512 2012-07-17
  • 打赏
  • 举报
回复
读到数据库的数据好像没完全读入16384个的样子

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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