ADO的GetChunk后VARIANT转换问题
数据库是ACCESS的ADO连接
在表中有个OLE对象的字段,字段名ParamInfo
unsigned char cParamInfo[PARAMSIZE];
memset(cParamInfo, 0x00, PARAMSIZE * sizeof(unsigned char));
// 对数据库进行写
VARIANT varBLOB;
::VariantInit(&varBLOB);
SAFEARRAY *psa = NULL;
SAFEARRAYBOUND rgsabound[1];
m_pRecordset->AddNew();
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = PARAMSIZE;
psa = ::SafeArrayCreate(VT_UI1, 1, rgsabound);
// 到这在这里cParamInfo就是直接写进PARAMSIZE个0的
for (long index = 0; index < PARAMSIZE; ++index)
::SafeArrayPutElement(psa, &i, cParamInfo + index);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
m_pRecordset->GetFields()->GetItem("ParamInfo")->AppendChunk(varBLOB);
m_pRecordset->Update();
// 对数据库进行读
VARIANT varBLOB;
::VariantInit(&varBLOB);
long lDataSize = 0l;
lDataSize = m_AdoConn.m_pRecordset->GetFields()->GetItem("ParamInfo")->ActualSize;
if (PARAMSIZE == lDataSize)
{
varBLOB = m_AdoConn.m_pRecordset->GetFields()->GetItem("ParamInfo")->GetChunk(PARAMSIZE);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
// for(long index=0; index < PARAMSIZE; ++index)
// {
// ::SafeArrayGetElement(varBLOB.parray, &index, cParamInfo + index);
// }
unsigned char *pBuf = NULL;
HRESULT hr = ::SafeArrayAccessData(varBLOB.parray, (void **)&pBuf);
if (FAILED(hr))
{
return;//-----------------------------------(1)
}
::SafeArrayUnaccessData(varBLOB.parray);
memcpy(cParamInfo, pBuf, PARAMSIZE);
}
}
--------------------------------------------------------------------
写是成功了,没有异常;
可以在读时到(1)处就返回了,为什么会这样呢?难道GetChunk时有问题??
SafeArrayAccessData怎么会失败呢?我以前用过的都好用的啊~~~
3x