我的某个表中有字段类型为binary(8),读没有问题,但存不进去,不知何故?1.读取方法:(没有问题,测试通过)
typedef struct MYDATA {
short No1;
short No2;
short No3;
short No4;
} MYDATA 
_variant_t varRelateNo = pRecordSet->GetCollect("related_no");
if(varRelateNo.vt!=VT_NULL)
{
SAFEARRAY *pArray;       
pArray = varRelateNo.parray;
MYDATA * pMyData = new MYDATA ;
memcpy(pMyData,pArray->pvData,sizeof MYDATA);
}2.存储方法:(2种都不行)
(1)_variant_t varRelateNo;
SAFEARRAY *pArray;       
pArray = varRelateNo.parray;
memcpy(pArray->pvData,pMyData,sizeof MYDATA);//执行此处跳入catch中,估计和varRelateNo为VT_EMPTY有关!
pRecordSet->PutCollect("related_no",varRelateNo);
(2)m_pFieldPtr   = m_pFieldsPtr->Item["related_no"];
str = "0x0000000000000123";
m_pFieldPtr->Value = (_variant_t)str;
//对于第2种方法,若字段类型为常规的int,short,string等均测试通过!
请高手指点!

解决方案 »

  1.   

    MYDATA data;
    .....try
    {
    VARIANT varBLOB;
    SAFEARRAY *psa;
    SAFEARRAYBOUND rgsabound[1];
    rgsabound[0].lLbound = 0;
    rgsabound[0].cElements = sizeof(MYDATA);
    psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
    BYTE* pByte;
    if(SafeArrayAccessData(psa,(void**)&pByte) == NOERROR)
    memcpy((LPVOID)pByte,(LPVOID)&data,sizeof(MYDATA));
    SafeArrayUnaccessData(psa); varBLOB.vt = VT_ARRAY | VT_UI1;
    varBLOB.parray = psa;
    m_pRecordset->Fields->GetItem("related_no")->AppendChunk(varBLOB);
    }
    catch(_com_error)
    {
    }
      

  2.   

    Earthdog(,谢谢!高手就是高手!