void CDlg::OnShowGrid(CString strSql,_RecordsetPtr& rs,_CommandPtr& Cmd,CDatagrid1& Grd,void (*pFGrd)(CDatagrid1&,_RecordsetPtr&)) { if(!strSql.IsEmpty()) { Cmd->CommandText = (_bstr_t)strSql; try { Grd.putref_DataSource(NULL); if(rs->State==adStateOpen) rs->Close(); rs->Open(m_vNULL,m_vNULL,adOpenDynamic,adLockOptimistic,adCmdText); m_Flg = false; // m_Flg = true; //AfxMessageBox(L"Before OnShow Grd.putref_DataSource((LPUNKNOWN)rs)"); Grd.putref_DataSource((LPUNKNOWN)rs); //AfxMessageBox(L"After OnShow Grd.putref_DataSource((LPUNKNOWN)rs)"); // m_Flg = false; /*----*/// m_Flg = true; m_CurCol = Grd.get_Col(); // s.Format("%i",m_CurCol); // AfxMessageBox(s); if(m_CurCol==-1 || m_CurCol==0 ) { m_CurCol = 1; } m_iCurType = GetTypeCol(rs,m_CurCol); pFGrd(Grd,rs); } catch(_com_error& e) { Grd.putref_DataSource(NULL); AfxMessageBox(e.ErrorMessage()); } } }
UINT CBADO::GetRecordCount( _RecordsetPtr pRecordset ) { int nCount = 0; try { if(pRecordset->EndOfFile) { Sleep(1); return 0; } pRecordset->MoveFirst(); } catch(...) { return 0; } if (pRecordset->FirstOfFile) return 0; while(!pRecordset->EndOfFile) { pRecordset->MoveNext(); nCount = nCount + 1; } pRecordset->MoveFirst(); return nCount; }
void CDlg::OnShowGrid(CString strSql,_RecordsetPtr& rs,_CommandPtr& Cmd,CDatagrid1& Grd,void (*pFGrd)(CDatagrid1&,_RecordsetPtr&)) { if(!strSql.IsEmpty()){ Cmd->CommandText = (_bstr_t)strSql; try{ Grd.putref_DataSource(NULL); if(rs->State==adStateOpen) rs->Close(); rs->Open(m_vNULL,m_vNULL,adOpenDynamic,adLockOptimistic,adCmdText); m_Flg = false; Grd.putref_DataSource((LPUNKNOWN)rs); /* m_CurCol = Grd.get_Col(); if(m_CurCol==-1 || m_CurCol==EmpCol ){ m_CurCol = DefCol; } m_iCurType = GetTypeCol(rs,m_CurCol); m_EditTBCh.SetTypeCol(m_iCurType); */ pFGrd(Grd,rs); } catch(_com_error& e){ Grd.putref_DataSource(NULL); AfxMessageBox(e.ErrorMessage()); } } }
/////////////////////////////////////////////// // //返回当前记录集的游标位置 // //IRecordset[in] 记录集智能指针 // //函数成功返回当前记录集的游标位置,否则返回-1 // long CFoxBase::RecNo(_RecordsetPtr IRecordset) { long pos=0; long i; if(IRecordset==NULL) return -1; if(IRecordset->adoEOF && IRecordset->BOF) return -1; while(!IRecordset->GetBOF()) { pos++; IRecordset->MovePrevious(); } i=pos; i--; IRecordset->MoveFirst(); while(i>0) { i--; IRecordset->MoveNext(); } return pos; }
CString CADODB::GetDataStr(_RecordsetPtr pRecordset) { if (NULL == pRecordset) return _T(""); CString strData; int nFieldsCount = pRecordset->Fields->GetCount(); // 字段数; for (int i = 0; i < nFieldsCount; i++) { char *pszName = _com_util::ConvertBSTRToString(pRecordset->Fields->GetItem((long)i)->GetName()); // 字段名 strData += pszName; strData += _T("\t"); delete[] pszName; } strData += _T("\n"); while (!pRecordset->EndOfFile) //遍历所有记录 { for (int i = 0; i < nFieldsCount; i++) { strData += pRecordset->GetCollect((long)i); strData += _T("\t"); } strData += _T("\n"); pRecordset->MoveNext(); } return strData; }
void CDlg::InitDataGrid1(CDatagrid1& Grd,_RecordsetPtr& rs) { CColumns GrdClms; CString strCap,strRec; CString s; long num,numRec; short i; float wdth; strCap.LoadString(IDS_STRING9013); numRec = 0; GrdClms.AttachDispatch(Grd.get_Columns()); if(rs->State==adStateOpen) { num = rs->GetadoFields()->GetCount(); numRec = rs->GetRecordCount(); strRec.Format(_T(" %i"),numRec); strCap +=strRec; Grd.put_Caption(strCap); for (i=0; i<num; i++) { switch(i) { case 0: GrdClms.GetItem((COleVariant) i).SetVisible(FALSE); break; case 1: wdth = 75; GrdClms.GetItem((COleVariant) i).SetWidth(wdth); break; case 2: wdth = 190; GrdClms.GetItem((COleVariant) i).SetWidth(wdth); break; case 3: wdth = 48; GrdClms.GetItem((COleVariant) i).SetWidth(wdth); break; case 4: wdth = 185; GrdClms.GetItem((COleVariant) i).SetWidth(wdth); break; case 5: wdth = 100; GrdClms.GetItem((COleVariant) i).SetWidth(wdth); break; default: GrdClms.GetItem((COleVariant) i).SetVisible(FALSE); break; } } } else { strRec.Format(_T(" %i"),numRec); strCap +=strRec; Grd.put_Caption(strCap); } }
void HiDBOracle::create_rs(const char* name, const char* sql, _RecordsetPtr& rs) { ::CoInitialize(NULL); HRESULT hr = rs.CreateInstance(__uuidof(Recordset)); if (FAILED(hr)) { _com_error e(hr); on_excetion("HiDBOracle::ExecuteScalar", sql, e); } rs->PutCursorLocation(adUseClient); }
int CCommDBOper::ADORecordsetOpen(_ConnectionPtr &pCon,_RecordsetPtr pRs,CString strOpenSql,CString strDcrOpen,int iWarn) { //函数说明:执行指定记录集对象指定SQL操作 //pCon 数据库连接对象 //pRs 当前操作用记录集对象 //strOpenSql 要执行的SQL命令 //strDcrOpen是对要使用SQL命令的描述 _variant_t tempStrSql; tempStrSql = strOpenSql; if (pRs == NULL) { pRs.CreateInstance(__uuidof(Recordset)); pRs->CursorLocation = adUseClient; } ADOCloseRecordset(pRs,0); while (true) { try { //有错 pRs->Open(tempStrSql,_variant_t(pCon),adOpenDynamic,adLockOptimistic,adCmdText); pRs->Open(tempStrSql,(IDispatch *)pCon,adOpenDynamic,adLockOptimistic,adCmdText); break; } catch (_com_error &e) { CString strMsg; strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description()); AfxMessageBox(strMsg); } try { //如果第一次打开失败,看能否以只读方式打开 pRs->Open(tempStrSql,(IDispatch *)pCon,adOpenDynamic,adLockReadOnly,adCmdText); return 2; } catch (_com_error &e) { CString strMsg; strMsg.Format("%s:%d %s", __FILE__, __LINE__, (LPSTR)e.Description()); AfxMessageBox(strMsg); CString errormessage; errormessage.Format("功能说明: %s\r\n记录集对象执行下列SQL命令\r\n%s\r\n失败! 错误信息:%s",strDcrOpen,strOpenSql,e.ErrorMessage()); WarnMessage(errormessage,iWarn);//显示错误信息 return RET_FAILED; } } return RET_OK; }
/////////////////////////////////////////////////////////// // //替换记录集中选中字段所有的值 // //IRecordset[in] 记录集智能指针 //FieldsName[in] 字段名 //Value[in] 输入替换FieldsName字段的值 // //函数成功返回TRUE,否则返回FALSE //当函数成功返回时,当前游标指针指向记录集最后一个记录的后面 // BOOL CFoxBase::ReplAll(_RecordsetPtr IRecordset, _variant_t FieldsName, _variant_t Value) { if(IRecordset==NULL) return FALSE; IRecordset->MoveFirst(); while(!IRecordset->adoEOF) { IRecordset->PutCollect(FieldsName,Value); IRecordset->Update(); IRecordset->MoveNext(); } return TRUE; }
///////////////////////////////////////////////////////////////////////////////////////// // // 在记录集中当前游标位置设置指定的字段的值 // // IRecordset[in] 记录集智能指针 // FieldsName[in] 字段名 // Value[in] 新的值 // // 如果有异常将调用ExceptionInfo函数 // void CFoxBase::PutTbValue(_RecordsetPtr IRecordset, _variant_t FieldsName, double Value) { if(IRecordset==NULL) return; try { IRecordset->PutCollect(FieldsName,_variant_t(Value)); IRecordset->Update(); } catch(_com_error /*&e*/) { // ExceptionInfo(e); throw; } }
void tagGroupDesc::GroupsFromRecordset(CArray<tagGroupDesc*,tagGroupDesc*> &groups, _RecordsetPtr &rst) { if (rst == NULL) return ; while (!rst->adoEOF) { tagGroupDesc * pGroup = NULL; FieldsPtr fields = rst->Fields; int nGroupId = fields->Item[L"GroupId"]->Value; INT_PTR i = 0; for (; i<groups.GetCount() && groups[i]->Id!=nGroupId; ++i); if (i != groups.GetCount()) { pGroup = groups[i]; } else { pGroup = new tagGroupDesc(nGroupId,fields); groups.Add(pGroup); } tagOpDesc op(fields); if (op.IsValid()) { op.Group = pGroup; pGroup->Ops.Add(op); } rst->MoveNext(); } }
_RecordsetPtr& GetRecordset(_bstr_t SQL) { m_pRecordset=NULL; try{ if(m_pConnection==NULL) //连接 Connect(); m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open((_bstr_t)SQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error e){ cout<<e.Description()<<endl; m_pRecordset=NULL; return m_pRecordset; } return m_pRecordset; }
//断开连接 void ExitConnect(void) { if(m_pRecordset!=NULL){ m_pRecordset->Close(); m_pConnection->Close(); } ::CoUninitialize(); //释放环境 }
__int64 ADOConnection::_GetIdentityFromRS(_RecordsetPtr pRS) const { try { if (pRS->GetRecordCount() == 0) return 0; _variant_t vaField; FieldsPtr pFields; FieldPtr pField; HRESULT hr; hr = pRS->get_Fields( &pFields ); vaField = "IDENT"; pFields->get_Item( vaField, &pField ); vaField.Clear(); if (pField) { pField->get_Value(&vaField); switch (vaField.vt) { case VT_NULL: return 0; case VT_I4: return vaField.intVal; default: if (vaField.decVal.sign == DECIMAL_NEG) return -vaField.cyVal.int64; else return vaField.cyVal.int64; } } return 0; } catch (...) { ErrorManager::Instance()->ReportError(ErrorManager::High, 5030, "ADOConnection::_GetIdentityFromRS", "Error while determening @@IDENTITY"); } return 0; }
//单位换算 //SourceUnits 被转换的单位 //UeUnits 转换后的单位 //返回单位换算因子 //dOffset 偏移值 double CAESARIIToPHS::UnitsToUeUnits(_RecordsetPtr rsData,CString SourceUnits,CString UeUnits,double &dOffset) { double x;//单位换算因子 CString strSQL; _RecordsetPtr pRs; _ConnectionPtr pCon; pCon.CreateInstance(__uuidof(Connection)); pRs.CreateInstance(__uuidof(Recordset)); strSQL="select * from UnitsToUeUnits ";//删除了pfg20050629where Units='"+SourceUnits+"' and UeUnits='"+UeUnits+"' try { pCon=rsData->GetActiveConnection(); pRs->Open(_variant_t(strSQL),(IDispatch*)pCon,adOpenStatic,adLockOptimistic,adCmdText); pRs->Filter=_variant_t("Units='"+SourceUnits+"' and UeUnits='"+UeUnits+"'");//pfg20050629 if(pRs->GetRecordCount()>0) { x=vtof(pRs->GetCollect(_T("value"))); dOffset=vtof(pRs->GetCollect(_T("offset")));//pfg20050701 return x; } else if(pRs->GetRecordCount()==0) { //pfg20050629弹出增加单位转换关系对话框(statr) CUnitsTransformDlg dlg; pRs->Filter=""; dlg.m_pRsUnits=pRs; dlg.m_strDestinationUnits=UeUnits; dlg.m_strSourceUnits=SourceUnits; if((dlg.DoModal())==IDOK) { pRs=dlg.m_pRsUnits;//pfg20050630 pRs->Filter=_variant_t("Units='"+SourceUnits+"' and UeUnits='"+UeUnits+"'");//pfg20050629 if(pRs->GetRecordCount()>0) { dOffset=vtof(pRs->GetCollect("Offset"));//pfg20050701 x=vtof(pRs->GetCollect(_T("value"))); return x; } else return 1.0; } else { m_IsCaesarError=TRUE;//增加了一个条件pfg20050627 } //pfg20050629弹出增加单位转换关系对话框(end) } } catch(_com_error &e) { if(AfxMessageBox("错误:当前单位不能转换,请更换单位后重试(仔细阅读使用说明)!",MB_YESNO)==IDYES) { m_IsCaesarError=TRUE;//增加了一个条件pfg20050627 } } return 1.0; }
DWORD CNHSQLServerDBO::OpenQuery(const _ConnectionPtr &pConnection, _RecordsetPtr &pRecordset, const wchar_t *const pwchSQL) { assert(NULL != pConnection); assert(NULL != pwchSQL); DWORD dwReturn(0x00); try { pRecordset.CreateInstance(L"ADODB.Recordset"); pRecordset->Open((_bstr_t)pwchSQL, _variant_t((IDispatch*)pConnection, true), adOpenStatic, adLockOptimistic, adCmdText); } catch (_com_error &e) { //#ifdef _DEBUG const int nErrMsgLength(MAX_PATH); wchar_t *pwchErrMsg = new wchar_t[nErrMsgLength](); _snwprintf_s(pwchErrMsg, nErrMsgLength, _TRUNCATE, L"CNHSQLServerDBO::OpenQuery发生错误(执行%s)。", pwchSQL); // 输出错误信息到输出窗口 OutputDebugStringW(L"\t"); OutputDebugStringW(pwchErrMsg); OutputDebugStringW(L"\n"); // 输出错误信息到日志文件 if (0 != wcscmp(m_wchLogFilePath, L"")) { // 当日志文件路径不为空时,写日志 CNHLogAPI::WriteLogEx(m_wchLogFilePath, LOG_ERR, L"NHSQLServerDBO", pwchErrMsg); } if (NULL != pwchErrMsg) { delete[] pwchErrMsg; pwchErrMsg = NULL; } OutputDBErrMsg(e); //#endif dwReturn = 0x01; } return dwReturn; }
/////////////////////////////////////////////////////////// // //替换从记录集中选中字段指定条记录的值(相当于FOXPRO中 Replace Next) // //IRecordset[in] 记录集智能指针 //FieldsName[in] 字段名 //Value[in] 输入替换FieldsName字段的值 //num[in] 需替换的记录数 // //函数成功返回TRUE,否则返回FALSE //函数从当前游标位置开始替换 //当函数成功返回时,当前游标指针指向最后修改的记录集上 //当需替换的记录数超过最后一条记录时,游标指向最后一条记录的后面 // BOOL CFoxBase::ReplNext(_RecordsetPtr IRecordset, _variant_t FieldsName, _variant_t Value, int num) { if(IRecordset==NULL || num<=0) return FALSE; while(!IRecordset->adoEOF) { IRecordset->PutCollect(FieldsName,Value); IRecordset->Update(); num--; if(num<=0) break; IRecordset->MoveNext(); } return TRUE; }
LRESULT DBConnect::QuerySQL(LPCSTR bstrSQL, _RecordsetPtr& pRecordset, CursorTypeEnum cursorType, LockTypeEnum lockType) { if (!m_bDBOpen||m_pAdoConn->GetState()!=ADODB::adStateOpen) { return -1; } try { pRecordset.CreateInstance(__uuidof(Recordset)); pRecordset->Open((_bstr_t)bstrSQL, m_pAdoConn.GetInterfacePtr(), cursorType /*adOpenStatic*/ /*adOpenDynamic*/, lockType/*adLockOptimistic*/, adCmdText); } catch(_com_error e) { MessageBox(NULL,e.Description(),_T("提示") ,1); throw e; } return 0; }
BOOL CPagerChannel::LoadFrom(_RecordsetPtr xRecordset) { m_pRecordset = xRecordset->Clone( adLockOptimistic ); m_pRecordset->Filter = "xjsjbh = " + (_bstr_t)xRecordset->GetCollect("xjsjbh"); //_variant_t xjsjbh = m_pRecordset->GetCollect( "xjsjbh" ); // theApp.Message(MSG_ERROR,"---------->debug:[%i][%i] reccc=%i", m_nChan, xjsjbh.lVal, // m_pRecordset->GetRecordCount()); CDialPacket* pPacket = new CDialPacket; pPacket->SetLocalId( "96031222" ); _variant_t TheValue = m_pRecordset->GetCollect( "xPhoneNum" ); if ( VT_NULL == TheValue.vt ) pPacket->SetRemoteId( "" ); else pPacket->SetRemoteId( (LPCTSTR)(_bstr_t)TheValue ); TheValue = m_pRecordset->GetCollect( "xCaller" ); if ( VT_NULL == TheValue.vt ) pPacket->SetFeeNumber( "" ); else pPacket->SetFeeNumber( (LPCTSTR)(_bstr_t)TheValue ); CHAR xCallerId[MAX_PHONE + 1]; ZeroMemory(xCallerId, MAX_PHONE + 1); pPacket->GetFeeNumber(xCallerId); pPacket->SetCallerId(xCallerId); #if 1 // 重新指定计费号码 TheValue = m_pRecordset->GetCollect( "xFeeNumber" ); if ( VT_NULL != TheValue.vt ) pPacket->SetFeeNumber( (LPCTSTR)(_bstr_t)TheValue ); #endif OnDialPacket( pPacket ); pPacket->Release(); #if 1 TheValue = m_pRecordset->GetCollect( "xPCMName" ); CString xUsrLvFile = (LPCTSTR)(_bstr_t)TheValue; xUsrLvFile.TrimLeft(); xUsrLvFile.TrimRight(); CString xCallType = ReadPagerType( xUsrLvFile, CA_HOOK ); if ( xCallType.CompareNoCase(CallType) ) CopyMemory( CallType, (LPCTSTR)(xCallType), MAX_CALLTYPE ); //if ( IsMusic(pPager->UsrLvFile) ) CopyMemory( pPager->CallType, "BEST", MAX_CALLTYPE ); #endif UpdateState( _PENDING_ ); m_bPending = TRUE; return TRUE; }
int RxADO::GetRecordCount(_RecordsetPtr pRst) { int nCount=0; try{ pRst->MoveFirst(); } catch(...) { return 0; } if(pRst->_EOF) return 0; while (!pRst->_EOF) { pRst->MoveNext(); nCount=nCount+1; } pRst->MoveFirst(); return nCount; }
int CNetworkTree::OnReadGroup(_RecordsetPtr xRecordset, CString& xUserGrp, CString& xGroupId) { _variant_t TheValue = xRecordset->GetCollect( "xentercode" ); ASSERT( VT_NULL != TheValue.vt ); xGroupId = (LPCTSTR)(_bstr_t)TheValue; TheValue = xRecordset->GetCollect( "xentername" ); if ( VT_NULL == TheValue.vt ) xUserGrp = _T("<NULL>"); else xUserGrp = (LPCTSTR)(_bstr_t)TheValue; TheValue = xRecordset->GetCollect( "xexpiredate" ); if ( VT_NULL != TheValue.vt ) { COleDateTime tt = TheValue; tt.SetTime( 0, 0, 0 ); COleDateTimeSpan tSpan = COleDateTime::GetCurrentTime() - tt; if ( tSpan.GetTotalDays() > 0 ) return EBase_NoPay; } return 0; }
void ADOConn::ExitConnect(void) { //关闭记录集和连接 if (m_pRecordset!=NULL) { m_pRecordset->Close(); } m_pConnection->Close(); ::CoUninitialize(); }
//Get record of database bool DataConnection::GetRecordSet(_RecordsetPtr &m_pRecordset , _bstr_t bstrSQL) //第一个参数是引用类型,也就是传出参数,可看做函数的返回值,第二个参数是SQL语句,是输入。 { try { if(m_pConnection==NULL) //初始化连接 OnInitADOConn(); m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pConnection->CursorLocation = adUseClient; m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); return true; } catch(_com_error e) //失败 { MessageBox(NULL,e.Description(),"提示",MB_ICONINFORMATION | MB_OK); return false; } }
// 打开记录集 _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) { //TODO: insert return statement here try { if (m_pConnection==NULL) { OnInitADOConn(); } //创建记录对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); //取得表中记录 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic,adCmdText); } catch (_com_error e) { e.Description(); } return m_pRecordset; }
BOOL CADOUtil::CheckRecordSetState(_RecordsetPtr RecSet) { if (RecSet != NULL && (RecSet->EndOfFile == VARIANT_FALSE)) { if (RecSet->EndOfFile == VARIANT_FALSE) { RecSet->MoveFirst(); return TRUE; } } return FALSE; }
DWORD CADODatabase::GetRecordCount(_RecordsetPtr m_pRs) { DWORD numRows = 0; numRows = m_pRs->GetRecordCount(); if(numRows == -1) { if(m_pRs->EndOfFile != VARIANT_TRUE) m_pRs->MoveFirst(); while(m_pRs->EndOfFile != VARIANT_TRUE) { numRows++; m_pRs->MoveNext(); } if(numRows > 0) m_pRs->MoveFirst(); } return numRows; }
//替换指定范围的某字段的值. bool CFoxBase::ReplaceAreaValue(_RecordsetPtr pRs, CString strField, CString strValue, int startRow, int endRow) { if(startRow > endRow) { endRow = startRow; } if( endRow <= 0 ) { return false; } if( endRow > pRs->GetRecordCount() ) { return false; } if( pRs->GetRecordCount() <= 0 ) { return false; } pRs->MoveFirst(); for(int i=1; i<=endRow && !pRs->adoEOF; i++, pRs->MoveNext()) { if( i >= startRow ) { pRs->PutCollect(_variant_t(strField), _variant_t(strValue)); pRs->Update(); } } return true; }
BYTE GetCollectByte(_RecordsetPtr m_pRecordset, char* key) { try{ VARIANT var = m_pRecordset->GetCollect(key); if(var.vt == VT_NULL) return NULL; return var.intVal; } catch(_com_error& e){ AfxMessageBox(e.ErrorMessage()); } return NULL; }
void main() { string sql; _RecordsetPtr m_pRecordset; sql="select * from testDB"; _bstr_t bstr_t(sql.c_str()); m_pRecordset= GetRecordset(bstr_t); _variant_t vID; _variant_t vName; _variant_t vAge; while(!m_pRecordset->adoEOF) { //取得第1列的值,从0开始计数,你也可以直接给出列的名称,如下一行 vID = m_pRecordset->GetCollect(_variant_t((long)0)); vName = m_pRecordset->GetCollect("Name"); vName = m_pRecordset->GetCollect("Age"); cout<<vID.iVal<<endl; //cout<<(char*)(_bstr_t)vName<<endl; //cout<<(LPCTSTR)(_bstr_t)vName<<endl; cout<<vName.bstrVal<<endl; cout<<vAge.intVal<<endl; m_pRecordset->MoveNext(); } //添加3条新的纪录 for(int i=0;i<3;i++){ m_pRecordset->AddNew(); m_pRecordset->PutCollect("ID", _variant_t("3")); m_pRecordset->PutCollect("Name", _variant_t("edward")); m_pRecordset->PutCollect("Age", _variant_t("18")); } m_pRecordset->Update(); cout<<"添加成功"<<endl; //移到首条记录 //m_pRecordset->MoveFirst(); //删除当前记录 //m_pRecordset->Delete(adAffectCurrent); ExitConnect(); }
//读Buffer bool CRsDupRgn::LoadBufferField(CBaseDBEntity *pGoods, const char* szFiledName, _RecordsetPtr &rs) { if(pGoods == NULL) return false; try { if(rs->GetadoEOF()) { ReleaseRs(rs); return false; } long lSize=0; FieldsPtr fldPtr = rs->GetFields(); FieldPtr itemPtr = fldPtr->GetItem(szFiledName); lSize = itemPtr->ActualSize; if(lSize > 0) { _variant_t varBLOB; varBLOB = itemPtr->GetChunk(lSize); BYTE *pBuf=NULL; SafeArrayAccessData(varBLOB.parray,(void**)&pBuf); SafeArrayUnaccessData(varBLOB.parray); // 清空SKILL CEntityProperty* ep = pGoods->GetDataEntityManager().GetEntityProperty(string(szFiledName)); if(ep) ep->SetBufAttr(0, pBuf, lSize); } } catch(_com_error e) { PrintErr(CStringReading::LoadString(IDS_DBS_RSDUPRGN,STR_DBS_DUPRGN_LOADRGNOBJERR), e); return false; } return true; }