⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 axlib.h

📁 一个非常好用的ADO封装类,程序员不再需要跟烦人的COM接口打交道,写数据库程序不再麻烦!
💻 H
📖 第 1 页 / 共 3 页
字号:
    void           _SetConnectionEvents(CAxConnectionEvents* pEvents);
    void           _ClearConnectionEvents();
	  bool           _IsOpen();
    bool           _SupportsTransactions();
	  ADOConnection* _GetActiveConnection() { return m_piConnection; } 

    //Collections
    ADOErrors*     Errors();
    ADOProperties* Properties();

    //Methods
	  void           BeginTrans(long *plTransLevel);
	  void	         Cancel();
    void           Close();
	  void	         CommitTrans();
	  void           Execute(LPCTSTR lpszCmdText, long* lpRecsAffected = NULL, 
                        CommandTypeEnum lOptions = adCmdUnknown);
	  void           Open(LPCTSTR lpszConnectStr = NULL,
                        LPCTSTR lpszUserID = NULL,
                        LPCTSTR lpszPwd = NULL,
                        ConnectOptionEnum eConnnect = adConnectUnspecified);
	  void	         RollbackTrans();

    //Properties
	  XactAttributeEnum  
                   Attributes(long lAttribute = -1);
	  long           CommandTimeout(long lSeconds = -1);
	  LPCTSTR        ConnectionString(LPCTSTR lpszConnectStr = NULL);
	  long           ConnectionTimeout(long lSeconds = -1);
	  CursorLocationEnum 
                   CursorLocation(long lCursorLocation = -1);
	  LPCTSTR        DefaultDatabase(LPCTSTR lpszDatabase = NULL);
	  IsolationLevelEnum           
                   IsolationLevel(IsolationLevelEnum eIsoLevel = adXactUnspecified);
	  ConnectModeEnum
                   Mode(long lConMode = -1);
	  LPCTSTR        Provider(LPCTSTR lpszProvider = NULL);
	  ObjectStateEnum
                   State();
	  LPCTSTR	       Version();

  };  // CAxConnection




  /////////////////////////////////////////////////////////////////////////////
  // CAxCommand class
  // Desc: Provide and interface to the stored procedures of a data provider.
  //       A derrived CAxCommand object is initialized with parameters and
  //       may be used as an argument to open a CAxRecordset object.
  class CAxCommand
  {
    friend class CAxRecordset;

  public:
    CAxCommand();
    virtual ~CAxCommand();

    //Attributes
    ADOCommand*     m_piCommand;
    ADOParameters*  m_piParameters;
    CAxConnection*  m_pConnection;

    //Implementation
    void            Create();

    //Collections
    ADOParameters*  Parameters();
    ADOProperties*  Properties();

    //Methods
    void            Cancel();
    ADOParameter*   CreateParameter(LPCTSTR lpszParam, DataTypeEnum eDataType,
                      ParameterDirectionEnum eParameterDirection, long lSize, 
                      _variant_t *pValue);
    ADORecordset*   Execute(long* plAffected = NULL);

    //Properties
    CAxConnection*  ActiveConnection(CAxConnection* pCn = NULL);
	  LPCTSTR         CommandText(LPCTSTR lpszCmdText = NULL);
	  long            CommandTimeout(long lSeconds = -1);
	  CommandTypeEnum CommandType(CommandTypeEnum eCmdType = adCmdUnspecified);
//	  void            Prepared(BOOL bPrepare = FALSE);
	  ObjectStateEnum State();

  protected:
	  virtual void    _CreateParameters() { /* Override in derrived class */  }
	  virtual void    _UpdateParameters() { /* Override in derrived class */  }
    void            _SetParamValue(LPCTSTR lpszParam, _variant_t* pValue);

  };

  /////////////////////////////////////////////////////////////////////////////
  // CAxRecordset class
  // Desc:
  //
  class CAxRecordset
  {
  //Construction
  public:
	  CAxRecordset();
	  virtual ~CAxRecordset();

  //Attributes
  public:

  protected:
    //dbAx objects
    CAxConnection*   m_pConnection;
    CAxCommand*      m_pCommand;
    CursorTypeEnum   m_eCursorType;
    LockTypeEnum     m_eLockType;

    //ADO COM objects
	  ADORecordset*		 m_piRecordset;
	  ADOConnection*	 m_piConnection;
    DWORD            m_dwEvents;                    //Recordset events cookie

	  CString				   m_strSourceString;
	  ADOFields*			 m_pFields;
	  CursorTypeEnum   m_CursorType;
	  LockTypeEnum		 m_LockType;
	  long				     m_lOptions;
	  _variant_t			 m_varLastGoodRecord;
	  _variant_t			 m_vtData;
//    ADOField*        m_pField;

    HRESULT          m_hr;

    //Implementation
    public:
    HRESULT          Create();

    //AxLib specific
    void             _ClearRecordsetEvents();
 	  bool	           _IsEmpty();
	  bool             _IsOpen();
    virtual void     _SetDefaultValues() { /*Virtual function*/ }
    void             _SetRecordsetEvents(CAxRecordsetEvents* pEvents);
    _variant_t*      _GetFieldValue(LPCTSTR lpszColumn);
    _variant_t*      _GetFieldValue(long nColumn);

    HRESULT          _GetFieldValue(LPCTSTR lpszColumn, _variant_t* pvtData);

    //Collections
    ADOFields*       Fields();
    ADOProperties*   Properties();

    //Methods
    void             AddNew();
    void             Cancel();
    void             CancelBatch();
    void             CancelUpdate();
    ADORecordset*    Clone(LockTypeEnum eLockType = adLockUnspecified);
    void             Close();
    CompareEnum      CompareBookmarks(_variant_t vtBkMark1, _variant_t vtBkMark2);
    void             Delete(AffectEnum eAffect = adAffectCurrent);
	  bool	           Find(LPCTSTR lpszCriteria, long nSkip = 0,
		                    SearchDirectionEnum SearchDirection = adSearchForward,
				                _variant_t* pvtStart = NULL);
    void             GetRows();
    void             GetString();
	  void	           Move(long nNumRecs, _variant_t* pvtStartRec = NULL);
	  void	           MoveFirst() ;
	  void	           MoveLast();
	  void	           MoveNext();
	  void	           MovePrevious();
    void             NextRecordset();

	  void	           Open(CAxCommand* pCmd,
				                CursorTypeEnum eCursorType = adOpenForwardOnly,
				                CursorLocationEnum eCursorLocation = adUseClient,
				                LockTypeEnum eLockType = adLockOptimistic, 
				                long nOptions = adCmdUnspecified);

	  void 	           Open(LPCTSTR szSource, CAxConnection *pConnection,
				                CursorTypeEnum eCursorType = adOpenForwardOnly,
				                CursorLocationEnum eCursorLocation = adUseClient,
				                LockTypeEnum eLockType = adLockOptimistic, 
				                long nOptions = adCmdUnspecified);

    void           Requery(ExecuteOptionEnum eExecuteOption = adOptionUnspecified);
    void           Resync(AffectEnum eAffectRecords = adAffectAll,
                          ResyncEnum eResyncValues = adResyncAllValues);

  void             Save(LPCTSTR lpszFileName, 
                        PersistFormatEnum ePersistFormat = adPersistADTG);
  bool             Supports(CursorOptionEnum eCursorOption);
  void             Update();

    //Properties
  long             AbsolutePage(long nPageNum = 0);
	long	           AbsolutePosition(long nPosition = 0);
  CAxCommand*      ActiveCommand();
  CAxConnection*   ActiveConnection();
	bool             IsBOF();
  _variant_t*      Bookmark(_variant_t* pvtBookmark = NULL);
	long             CacheSize(long nCacheSize = 0);
	CursorLocationEnum
                   CursorLocation(long eCursorLocation = -1);
	CursorTypeEnum   CursorType(CursorTypeEnum eCursorType = adOpenUnspecified);
	EditModeEnum     EditMode();
  bool             IsEOF();
  _variant_t       Filter(_variant_t* pvtFilter = NULL);
  LPCTSTR          Index(LPCTSTR lpszIndex = NULL);
	LockTypeEnum     LockType(LockTypeEnum eLockType = adLockUnspecified);
  MarshalOptionsEnum
                   MarshalOptions(long eOptions = -1);
  long             MaxRecords(long nMaxRecords = -1);
  long             PageCount();
  long             PageSize(long nPageSize = 0);
	long             RecordCount();
	LPCTSTR          Sort(LPCTSTR lpszSort = NULL);
	LPCTSTR          Source(LPCTSTR lpszSource = NULL);
	ObjectStateEnum  State();
	RecordStatusEnum Status();

  ADOFields*       GetFields() { return (m_pFields); }
	long	           FieldCount();

  
protected:
  HRESULT          _getADOField(LPCTSTR lpszColumn, ADOField** ppFld);
  HRESULT          _isUpdatable(ADOField* pFld);
  HRESULT          _getFldValue(ADOField* pFld, unsigned short varType, void** ppValue);
  HRESULT          _setFldValue(ADOField* pFld, unsigned short varType, void** ppValue);
  HRESULT          _setGetFieldValue(bool bSave, LPCTSTR lpszColumn, 
                                       unsigned short varType, void* pvValue);
public:
  void             FX_BigInt(bool bSave, LPCTSTR lpszColumn, LONGLONG& llValue )
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_I8, (void*)&llValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_BigInt"), m_hr); }

	void	           FX_Binary(bool bSave, LPCTSTR lpszColumn, BYTE** ppValue);

	void             FX_Bool(bool bSave, LPCTSTR lpszColumn, bool& bValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_BOOL, (void*)&bValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Bool"), m_hr); }

  void             FX_Char(bool bSave, LPCTSTR lpszColumn, CString& szValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_BSTR, (void*)&szValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Char"), m_hr); }

	void	           FX_DateTime(bool bSave, LPCTSTR lpszColumn, COleDateTime& dtValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_DATE, (void*)&dtValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_DateTime"), m_hr); }

  void             FX_Decimal(bool bSave, LPCTSTR lpszColumn, double& dblValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_DECIMAL, (void*)&dblValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Decimal"), m_hr); }

	void             FX_Float(bool bSave, LPCTSTR lpszColumn, double& dblValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_R8, (void*)&dblValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Float"), m_hr); }

	void             FX_Image(bool bSave, LPCTSTR lpszColumn, BYTE** ppValue);

	void             FX_Integer(bool bSave, LPCTSTR lpszColumn, int& iValue)
                   {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_I4, (void*)&iValue))
                     ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Integer"), m_hr); }

  void             FX_Money(bool bSave, LPCTSTR lpszColumn, COleCurrency& cyValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_CY, (void*)&cyValue))
                      ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Money"), m_hr); }

  void             FX_NChar(bool bSave, LPCTSTR lpszColumn, CString& szValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_BSTR, (void*)&szValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_NChar"), m_hr); }

  void             FX_NText(bool bSave, LPCTSTR lpszColumn, CString& szValue)
                   {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_BSTR, (void*)&szValue))
                     ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_NText"), m_hr); }

  void             FX_Numeric(bool bSave, LPCTSTR lpszColumn, double& dblValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_DECIMAL, (void*)&dblValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Numeric"), m_hr); }

  void             FX_NVarChar(bool bSave, LPCTSTR lpszColumn, CString& szValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_BSTR, (void*)&szValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_NVarChar"), m_hr); }

  void             FX_Real(bool bSave, LPCTSTR lpszColumn, float& fltValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_R4, (void*)&fltValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Real"), m_hr); }

	void	           FX_SmallDateTime(bool bSave, LPCTSTR lpszColumn, COleDateTime& dtValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_DATE, (void*)&dtValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_SmallDateTime"), m_hr); }

  void             FX_SmallInt(bool bSave, LPCTSTR lpszColumn, short& sValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_I2, (void*)&sValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_SmallInt"), m_hr); }

  void             FX_SmallMoney(bool bSave, LPCTSTR lpszColumn, COleCurrency& cyValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_CY, (void*)&cyValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_SmallMoney"), m_hr); }

  void             FX_SQLVariant(bool bSave, LPCTSTR lpszColumn, _variant_t& vtValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_VARIANT, (void*)&vtValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_SQLVariant"), m_hr); }

  void             FX_Text(bool bSave, LPCTSTR lpszColumn, CString& szValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_BSTR, (void*)&szValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_Text"), m_hr); }

  void             FX_TinyInt(bool bSave, LPCTSTR lpszColumn, BYTE& chValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_UI1, (void*)&chValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_TinyInt"), m_hr); }

	void             FX_UniqueIdentifier(bool bSave, LPCTSTR lpszColumn, CString& szValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_BSTR, (void*)&szValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_UniqueIdentifier"), m_hr); }

  void	           FX_VarBinary(bool bSave, LPCTSTR lpszColumn, BYTE** ppValue);

  void             FX_VarChar(bool bSave, LPCTSTR lpszColumn, CString& szValue)
                     {if FAILED(_setGetFieldValue(bSave, lpszColumn, VT_BSTR, (void*)&szValue))
                       ThrowAxException(AXLIB_ERROR_NONE, _T("CAxRecordset::FX_VarChar"), m_hr); }
  
protected:
  virtual void     DoFieldExchange(bool bSave) { }

  }; // class CAxRecordset

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -