在数据库中找到对应的记录,然后修改此记录,需要存一些二进制信息。
但是运行到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;
}
但是运行到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;
}
解决方案 »
- 请问 : 如何枚举任务栏上的窗口句柄,而且顺序是从左至右的顺序
- 急!!!怎么将CByteArray 中的数据写进文件中????
- linux下c++弄了一个xml字符串放到activemq队列中,Java从队列中取出来之后,中文是乱码。怎么解决。
- SDK方式下如何创建一个透明或半透明的窗体? ????
- 为什么我只画了一个Richedit就出错了
- 在VC++里怎样映射内存??
- 位图结构的问题!
- 有没有这样的一个软件?取得屏幕上某点的坐标和RGB值???
- Cmyclass (*P)[3]和int(*P)[]=new Cmyclass[3]和int *p=new Cmyclass[3]一样吗?
- 在com+中如何在各层之间传递自定义数据
- 窗口缩放?
- 如何保存带格式文本到数据库
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);