在数据库中找到对应的记录,然后修改此记录,需要存一些二进制信息。
但是运行到AppendChunk处就抛出了异常。Code:800A0C93 在此环境中不允许操作。大家帮忙看看,谢谢!BOOL CXxDb::Func(LPPRODREGCODE lpPrc, LPBYTE lpCalData, int iCalLen)
{
if (!m_pConnection)
return FALSE;
if (m_pConnection->State != adStateOpen)
return FALSE;
if (!lpCalData)
return FALSE; BOOL bRet = FALSE;
CString strSql, strTime;
SYSTEMTIME st; VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1]; _RecordsetPtr pRecordset = NULL;
pRecordset .CreateInstance(__uuidof(Recordset));
try
{
strSql = "SELECT * FROM imeitb WHERE mpt = '";
strSql += lpPrc->MPTCode;
strSql += "'";
_bstr_t bstr = strSql;
pRecordset->Open(bstr, m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText);
if (!pRecordset->adoEOF)
{
pRecordset->PutCollect("used", 1);
GetLocalTime(&st);
strTime.Format(TEXT("%04d-%02d-%02d %02d:%02d:%02d"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
pRecordset->PutCollect("usetime", strTime.GetBuffer()); // save cal data
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = iCalLen;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < iCalLen; i++)
SafeArrayPutElement (psa, &i, lpCalData + i);
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;
pRecordset->GetFields()->GetItem("caldata")->AppendChunk(varBLOB);  // <<<<<<<<-----------这里抛出了异常
SafeArrayDestroy(psa); pRecordset->Update(); bRet = TRUE;
}
pRecordset->Close();
pRecordset = NULL;
}
catch (_com_error &e)
{
ShowProviderError();
ShowComError(e);
}
return bRet;
}

解决方案 »

  1.   

    晕啊,一晚上都没人帮我看,我用Stream解决了。散分散分 _StreamPtr pStream = NULL;
    pStream.CreateInstance(__uuidof(Stream)); variant_t varOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    pStream->PutType(adTypeBinary);
    pStream->Open(varOptional, adModeUnknown, adOpenStreamUnspecified, _bstr_t(), _bstr_t());// pStream->Write(_variant_t(pRecordset->GetFields()->GetItem("caldata")->Value));
    // pStream->SaveToFile("d:\\temp.cal", adSaveCreateNotExist); pStream->Write(varBLOB);
    pRecordset->GetFields()->GetItem("caldata")->Value = pStream->Read(iCalLen);
      

  2.   

    呵呵 ,但是现在有  (小三)  先 回了, 搂住想删除也没机会了。我就来接点 fen
      

  3.   

    好久不来,规矩都不懂了-_-,分多不怕散,呵呵顺便再问一下,Stream号称在ADO2.5以后才支持,那ADO2.5在Windows什么版本以后就默认支持了?