16,551
社区成员
发帖
与我相关
我的任务
分享
//开始把文字内存区域的数据写入数据库
char *pBuf = (char *)pText; //内存区域
VARIANT varBLOB;
SAFEARRAY *psa; //流描述符
SAFEARRAYBOUND rgsabound[1];
if(pBuf) //如果内存区域不为空
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nLenthText; //长度
psa = SafeArrayCreate(VT_UI1, 1, rgsabound); //类型是unsigned char/流维数/
for (long i = 0; i < (long)nLenthText; i++)
SafeArrayPutElement (psa, &i, pBuf++); //分配单独的元素到流
varBLOB.vt = VT_ARRAY | VT_UI1; //类型是safe array|unsigned char
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem(_T("文字"))->AppendChunk(varBLOB); //写入ole字段
}
//把ole中的文字读出来
char * pTextBuffer = NULL;
DWORD lDataSize = m_pRecordset->GetFields()->GetItem("文字")->ActualSize;
if(lDataSize > 0) //如果有数据
{
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem("文字")->GetChunk(lDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1)) //类型是safe array|unsigned char
{
if(pTextBuffer = new char[lDataSize+1]) //分配存储空间
{
char *pBuf = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuf); //锁住缓冲区数据
memcpy(pTextBuffer,pBuf,lDataSize); //复制数据到缓冲区
SafeArrayUnaccessData (varBLOB.parray); //解锁缓冲区数据
CString a;
a.Format(_T("%s"), pBuf);
AfxMessageBox(a); //这里得到的文字总是缺少后面一截,why?
}
}
}