ADOSetBase_DUMMY.h #if !defined(DUMMYInclude) #define DUMMYInclude #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "adobaserecordset.h" class CADOSetBase_DUMMY { public: ConnectPara m_ConnPara; CStringArray m_FieldNameArray; long m_log_dummy_col; void InitNull() { m_log_dummy_col=(long)0; } CADOSetBase_DUMMY() { m_FieldNameArray.Add(L"dummy_col"); m_ConnPara.Set(_T("Provider=MSDASQL.1;Persist Security Info=False;Data Source=pfc;"), _T(""), _T(""), _T("SELECT * FROM DUMMY")); InitNull(); } CADOSetBase_DUMMY(CADOSetBase_DUMMY &other) { m_log_dummy_col=other.m_log_dummy_col; } ~CADOSetBase_DUMMY() {}; BOOL IsValid(BOOL more) { return TRUE; } CADOSetBase_DUMMY& CADOSetBase_DUMMY::operator = (CADOSetBase_DUMMY &other) { m_log_dummy_col=other.m_log_dummy_col; return *this; }; }; #endif ADOSetBase_DUMMYRec.h #if !defined(DUMMYRecInclude) #define DUMMYRecInclude #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "adobaserecordset.h" #include "ADOSetBase_DUMMY.h" class CADOSetBase_DUMMYRec : public CAdoBaseRecordset { public: CADOSetBase_DUMMYRec():CAdoBaseRecordset() { g_lpcwszSource=m_DUMMY.m_ConnPara.m_ConnectionString;//连接源 g_lpcwszUser=m_DUMMY.m_ConnPara.m_UserID;//用户 g_lpcwszPwd=m_DUMMY.m_ConnPara.m_Password;//密码 g_lpcwszSQL=m_DUMMY.m_ConnPara.m_Source;//记录集需要的源 } ~CADOSetBase_DUMMYRec() { m_Array.RemoveAll(); } CADOSetBase_DUMMY m_DUMMY; CArray m_Array; virtual int UpdateRec(BOOL valid); virtual int LoadRec(); virtual int UpdateArray(BOOL valid); virtual int LoadArray(); virtual int SetFieldValue(CString FiledName,COleVariant Value); virtual int GetFieldValue(CString FieldName,COleVariant *Value); virtual int GetFieldPosition(CString FieldName); }; #endif ADOSetBase_DUMMYRec.cpp #include "ADOSetBase_DUMMYRec.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //更新记录集 //valid是否校验非常用字段的值的合理性 //成功返回0 //不成功返回非0 int CADOSetBase_DUMMYRec::UpdateRec(BOOL valid) { if(!m_DUMMY.IsValid(valid)) { return 1; } HRESULT hr; VARIANT varFields; VARIANT varValues; ADOFields *pFields = NULL; COleVariant varIndex; COleVariant varFieldVal; if (m_fRecordsetEmpty) return 1; varFields.vt = VT_ERROR; varFields.scode = DISP_E_PARAMNOTFOUND; varValues.vt = VT_ERROR; varValues.scode = DISP_E_PARAMNOTFOUND; long FieldCount; FieldCount=m_DUMMY.m_FieldNameArray.GetSize(); try { THROW_ERR( m_piRecordSet->get_Fields(&pFields) ); } catch (HRESULT hr) { MessageBox(NULL,"得到字段集不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } for(long i=0;iget_Item(varIndex, &pField) ); } catch (RESULT hr) { if(pField) pField->Release(); pFields->Release(); MessageBox(NULL,"得到字段不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } switch(i) { case 0: varFieldVal.vt = VT_I4; varFieldVal.lVal = m_DUMMY.m_log_dummy_col; break; } try { THROW_ERR( pField->put_Value(varFieldVal) ); } catch (HRESULT hr) { pField->Release(); MessageBox(NULL,"设置字段值不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } varFieldVal.Clear(); pField->Release(); } try { THROW_ERR( m_piRecordSet->Update(varFields, varValues) ); } catch (HRESULT hr) { pFields->Release(); MessageBox(NULL,"更新记录不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } pFields->Release(); return 0; } //装载记录集,内容放置到表名类中 //成功返回0 //不成功返回非0 int CADOSetBase_DUMMYRec::LoadRec() { HRESULT hr; COleVariant vFldName, vID; if (!m_fConnected) return 1; if(m_fRecordsetEmpty) return 1; long FieldCount; FieldCount=m_DUMMY.m_FieldNameArray.GetSize(); for(long i=0;iget_Collect(vFldName, vID) ); m_DUMMY.m_log_dummy_col=vID.lVal; vFldName.Clear(); vID.Clear(); break; } } catch (HRESULT hr) { CString temp=_T("得到字段"); temp+=m_DUMMY.m_FieldNameArray[i]; temp+=_T("的值不成功"); MessageBox(NULL,temp,"记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } } if(!this->m_DUMMY.IsValid(TRUE)) { MessageBox(NULL,"读取数据无效","装载模板内容",MB_ICONERROR); return 1; } return 0; } //成组更新记录集,更新前把所有记录删除请慎用 //成功返回0 //不成功返回非0 0int CADOSetBase_DUMMYRec::UpdateArray(BOOL valid) { while(!m_fRecordsetEmpty) { if(DeleteRecord()) return 1; } long l,count; count=m_Array.GetSize(); for(l=0;lget_EOF(&vbEOF) ); } catch (HRESULT hr) { MessageBox(NULL,"判断到达尾部不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } while(!vbEOF && !m_fRecordsetEmpty) { if(LoadRec()) return 1; if(MoveNext()) return 1; try {THROW_ERR( m_piRecordSet->get_EOF(&vbEOF) ); } catch (HRESULT hr) { MessageBox(NULL,"判断到达尾部不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } m_Array.Add(m_DUMMY); } return 0; } //设置一个字段的值 //FieldName 字段名称 //Value 值 //成功返回0 //不成功返回非0 int CADOSetBase_DUMMYRec::SetFieldValue(CString FieldName,COleVariant Value) { int position=this->GetFieldPosition(FieldName); if(position<0 || position>0) { ::MessageBox(NULL,"在设置字段值时输入的字段名称无效","校验字段名称",MB_ICONERROR); return 1; } HRESULT hr; VARIANT varFields; VARIANT varValues; ADOFields *pFields = NULL; ADOField *pField = NULL; COleVariant varIndex,varFieldVal; if (m_fRecordsetEmpty) return 1; varFields.vt = VT_ERROR; varFields.scode = DISP_E_PARAMNOTFOUND; varValues.vt = VT_ERROR; varValues.scode = DISP_E_PARAMNOTFOUND; long FieldCount; FieldCount=m_DUMMY.m_FieldNameArray.GetSize(); try { THROW_ERR( m_piRecordSet->get_Fields(&pFields) ); } catch (HRESULT hr) { MessageBox(NULL,"得到字段集不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } switch(position) { case 0: if(Value.vt!=VT_I4) { ::MessageBox(NULL,"在设置字段值时输入的字段类型不匹配","校验字段属性",MB_ICONERROR); return 1; } varIndex = m_DUMMY.m_FieldNameArray[0] ; break; } try { THROW_ERR( pFields->get_Item(varIndex, &pField) ); } catch (HRESULT hr) { pFields->Release(); MessageBox(NULL,"得到字段对象不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } varFieldVal=Value; try { THROW_ERR( pField->put_Value(varFieldVal) ); } catch (HRESULT hr) { pFields->Release(); pField->Release(); MessageBox(NULL,"设置字段值不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } varFieldVal.Clear(); try { THROW_ERR( m_piRecordSet->Update(varFields, varValues) ); } catch (HRESULT hr) { pFields->Release(); pField->Release(); MessageBox(NULL,"更新记录不成功","记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } pField->Release(); pFields->Release(); return 0; } //得到某个字段的值 //FieldName 字段名称 //*Value 传地址调用,里面有返回值 //成功返回0 //不成功返回非0 int CADOSetBase_DUMMYRec::GetFieldValue(CString FieldName,COleVariant *Value) { HRESULT hr; COleVariant vFldName; if (!m_fConnected) return 1; if(m_fRecordsetEmpty) return 1; int position=this->GetFieldPosition(FieldName); if(position<0 || position>0) { ::MessageBox(NULL,"在设置字段值时输入的字段名称无效","校验字段名称",MB_ICONERROR); return 1; } switch(position) { case 0: if(Value->vt!=VT_I4) { ::MessageBox(NULL,"在读取字段值时输入的字段类型不匹配","校验字段属性",MB_ICONERROR); return 1; } vFldName.bstrVal = m_DUMMY.m_FieldNameArray[0].AllocSysString(); vFldName.vt=VT_BSTR; try { THROW_ERR( m_piRecordSet->get_Collect(vFldName, *Value) ); } catch (HRESULT hr) { CString temp(_T("得到字段")); temp+=m_DUMMY.m_FieldNameArray[0]; temp+=_T("值不成功"); MessageBox(NULL,temp,"记录集操作",MB_ICONERROR); PopupErrorMessage(hr); return 1; } break; } return 0; } //得到字段的排列位置 //FieldName字段名 //成功返回字段位置 //不成功返回-1 int CADOSetBase_DUMMYRec::GetFieldPosition(CString FieldName) { int position=-1,count=m_DUMMY.m_FieldNameArray.GetSize(); for(int i=0;i