错误 ADO->RecordSet->AppendChunk 在此环境中不允许操作

icr_mio 2006-07-12 07:18:41
在数据库中找到对应的记录,然后修改此记录,需要存一些二进制信息。
但是运行到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;
}
...全文
1124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
whwjn 2006-07-15
  • 打赏
  • 举报
回复
mark
icr_mio 2006-07-13
  • 打赏
  • 举报
回复
好久不来,规矩都不懂了-_-,分多不怕散,呵呵

顺便再问一下,Stream号称在ADO2.5以后才支持,那ADO2.5在Windows什么版本以后就默认支持了?
cenchure 2006-07-13
  • 打赏
  • 举报
回复
呵呵 ,但是现在有 (小三) 先 回了, 搂住想删除也没机会了。我就来接点 fen
lixiaosan 2006-07-13
  • 打赏
  • 举报
回复
你如果不回贴,你就可以删贴,而不损失分数的。。
icr_mio 2006-07-13
  • 打赏
  • 举报
回复
晕啊,一晚上都没人帮我看,我用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);

4,011

社区成员

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

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