资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 软件开发 >
Advertisement
文章正文

感觉vc对数据库的支持很弱啊,好痛苦

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   

在vc中用ado虽然不是很麻烦但是由于vc没有提供对ado的包装类,象数据感知控件,ADO事件(如记录集的移动事件)等机制都难以在vc下运用和实现,于是乎我在delphi下习惯了的一些运用在vc下都无法做到。。。开发进度非常缓慢,痛苦啊。。。。在网上download   的一些vc运用数据库的例子都做得不伦不类。。。。各位有什么感受也说说啊

网友回答:

发表者:Aizz

资料是满大街都有,看你怎么找了。不太清楚“数据感知”是什么概念,帮不到你,ADO   Event倒是多的很。  
  (以下的例子由   PlatForm   SDK   中摘录,请注意。)  
  //   eventmodel.cpp   :   Defines   the   entry   point   for   the   console   application.  
  //  
   
  #import   "c:\Program   Files\Common   Files\System\ADO\msado15.dll"   \  
        no_namespace   rename("EOF",   "EndOfFile")  
  #include   <comdef.h>  
  #include   <stdio.h>  
   
  //----The   Connection   events----------------------------------------------  
   
  class   CConnEvent   :   public   ConnectionEventsVt  
  {  
  private:  
              ULONG       m_cRef;  
        public:  
              CConnEvent()   {   m_cRef   =   0;   };  
              ~CConnEvent()   {};  
   
   
              STDMETHODIMP   QueryInterface(REFIID   riid,   void   **   ppv);  
              STDMETHODIMP_(ULONG)   AddRef(void);  
              STDMETHODIMP_(ULONG)   Release(void);  
   
              STDMETHODIMP   raw_InfoMessage(    
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Connection   *pConnection);  
               
              STDMETHODIMP   raw_BeginTransComplete(    
                    LONG   TransactionLevel,  
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Connection   *pConnection);  
               
        STDMETHODIMP   raw_CommitTransComplete(    
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Connection   *pConnection);  
               
              STDMETHODIMP   raw_RollbackTransComplete(    
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Connection   *pConnection);  
               
              STDMETHODIMP   raw_WillExecute(    
                    BSTR   *Source,  
                    CursorTypeEnum   *CursorType,  
                    LockTypeEnum   *LockType,  
                    long   *Options,  
                    EventStatusEnum   *adStatus,  
                    struct   _Command   *pCommand,  
                    struct   _Recordset   *pRecordset,  
                    struct   _Connection   *pConnection);  
               
              STDMETHODIMP   raw_ExecuteComplete(    
                    LONG   RecordsAffected,  
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Command   *pCommand,  
                    struct   _Recordset   *pRecordset,  
                    struct   _Connection   *pConnection);  
               
        STDMETHODIMP   raw_WillConnect(    
                    BSTR   *ConnectionString,  
                    BSTR   *UserID,  
                    BSTR   *Password,  
                    long   *Options,  
                    EventStatusEnum   *adStatus,  
                    struct   _Connection   *pConnection);  
               
              STDMETHODIMP   raw_ConnectComplete(    
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Connection   *pConnection);  
               
              STDMETHODIMP   raw_Disconnect(    
                    EventStatusEnum   *adStatus,  
                    struct   _Connection   *pConnection);  
  };  
   
  //-----The   Recordset   events----------------------------------------------  
   
  class   CRstEvent   :   public   RecordsetEventsVt  
          {  
        private:  
              ULONG   m_cRef;        
          public:  
              CRstEvent()   {   m_cRef   =   0;   };  
              ~CRstEvent()   {};  
   
                    STDMETHODIMP   QueryInterface(REFIID   riid,   void   **   ppv);  
                    STDMETHODIMP_(ULONG)   AddRef(void);  
                    STDMETHODIMP_(ULONG)   Release(void);  
   
                    STDMETHODIMP   raw_WillChangeField(    
                    LONG   cFields,  
                    VARIANT   Fields,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_FieldChangeComplete(    
                    LONG   cFields,  
                    VARIANT   Fields,  
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_WillChangeRecord(    
                    EventReasonEnum   adReason,  
                    LONG   cRecords,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_RecordChangeComplete(    
                    EventReasonEnum   adReason,  
                    LONG   cRecords,  
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_WillChangeRecordset(    
                    EventReasonEnum   adReason,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_RecordsetChangeComplete(    
                    EventReasonEnum   adReason,  
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_WillMove(    
                    EventReasonEnum   adReason,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_MoveComplete(    
                    EventReasonEnum   adReason,  
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_EndOfRecordset(    
                    VARIANT_BOOL   *fMoreData,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_FetchProgress(    
                    long   Progress,  
                    long   MaxProgress,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
               
              STDMETHODIMP   raw_FetchComplete(    
                    struct   Error   *pError,  
                    EventStatusEnum   *adStatus,  
                    struct   _Recordset   *pRecordset);  
  };

发表者:mixtrue

对于要实现事件功能,那的写一个自己的函数了,你可以写一个CADoEvent类在你操作记录的   时候   ,和   数据库连接的时候你发送一个registered   message,然后在message   处理函数作你想要做的事情,这样在你移动记录,代开recorder的时候就会触发这个message,你就可以在   message   handle   函数中完成你自己的事件,当然你的可以把你的   message   handle   函数做成一虚函数,这样你在子类中还可以完成子类的特定函数功能。


 

 
热门推荐笔记本: IBM笔记本
相关文章:
笔记本相关:
IT技术文章:
webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
©2007 popbb.net All Rights Reserved