我想把一系列用ADO访问数据库的操作都封装在ADO里去,但是不知道如何在编写控件的时候使用ADO,谁能告诉我!!

解决方案 »

  1.   

    不好意思,是想封装到OCX(MFC)里去:)
      

  2.   

    #import directive在ocx里面也可以用
    msdn2.microsoft.com/en-us/8etzzkb6.aspx - 22k
      

  3.   

    #import "C:\Program Files\Common Files\System\ado\msado15.dll"  rename_namespace("ARXADO") rename("BOF","adoBOF")  rename("EOF","adoEOF") 
    这是我的import,编译不会出错,但是我定义一个_RecordsetPtr  m_adoSet;他就会告诉我missing storage-class or type specifiers,请教一下为啥呢
      

  4.   

    masterz!!!!能给点示例代码吗?或者看看我的有什么问题.谢谢了!!1
      

  5.   

    例子代码
    http://www.fruitfruit.com/vc/atl/ado.cpp
    http://www.fruitfruit.com/vc/database/ado_create_rs.txt
    你的代码问题在于#import的时候指明了namespace :ARXADO
    那你用的时候要带上它 ARXADO::_RecordsetPtr
    有2种其他办法:在#import的时候用no_namespace, 或者在#import下面加上
    using namespace ARXADO;
      

  6.   

    使用no_namespace,有这样的错误:
    e:\xgs\work\dataactivex\debug\msado15.tlh(171) : error C2011: 'LockTypeEnum' : 'enum' type redefinition
    使用using namespace ARXADO,
    他会说没有ARXADO这个名字空间
    使用我的,调用不会有错但是不能定义!!!!!
    我以前也用过ADO的啊,从来没见过这样的问题,不知道是不是在OCX里有特殊的方式啊!!!!
      

  7.   

    在stdafx.h中#pragma warning(disable: 4146)
    #import  "c:\program files\common files\system\ado\msado15.dll"  no_namespace rename( "EOF", "adoEOF" )
    #pragma warning(default: 4146)在xxx.odl 中
    library XCOMBOXLib
    {
             importlib(STDOLE_TLB);
    importlib(STDTYPE_TLB);
         //------------------------------加下面这个,如果系统不装在c盘,把c:该成其他就是了
    importlib("c:\program files\common files\system\ado\msado15.dll");         //[id(30)] IDispatch* DataSourceOfRst;把IDispatch* 改成_Recordset*就可以在VB,delphi中暴露DataSourceOfRst属性的自动化,不然在DataSourceOfRst后打一个点,ADO记录级的方法和属性都不会自动列出来的
               [id(30)] _Recordset* DataSourceOfRst;//这里不能把_Recordset*写成_RecordsetPtr,因为_RecordsetPtr是_Recordset*的宏定义,但没有定义在odl,所以会报错