我是用一种在stdafx.h中添加#include<afxdb.h>然后再定义数据库中的不同表的CRECORDSET的派生类。CStaffinfoSet和CLoginSet类。刚学不知道这是什么方法
问题来了:刚开始的登陆界面还行。但是在进入主界面之后我不知道该怎么从编辑框中显示数据库表1的某项。。
像ODBC就可以直接了。比如有个编辑框m_strEdit定义之后就会有个m_pSet就可以直接连接到数据库中的某项了
来人帮下忙呀 。。明天就要交课程报告 了。。

解决方案 »

  1.   

    我刚学ADO访问数据库,给你提示一下
    1、导入库文件
     使用ADO前必须在工程的stdafx.h文件最后用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:
    #import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile")2、初始化COM环境
    (1)   ::CoInitialize(NULL); //初始化OLE/COM库环境
    2)也可以调用MFC全局函数
    AfxOleInit();3、三大指针对象的定义和创建实例
     
    (1) 
    _ConnectionPtr pConnection("ADODB.Connection");
    _RecordsetPtr pRecordset("ADODB.Recordset");
    _CommandPtr pCommand("ADODN.Command");
     
    (2)
     _ConnectionPtr pConnection;
    _RecordsetPtr pRecordset;
    _CommandPtr pCommand;
     
    pConnection.CreateInstance(__uuidof(Connection));
    pRecordset.CreateInstance(__uuidof(Recordset));
    pCommand.CreateInstance(__uuidof(Command));
     
    要产生一个智能指针对象,其实在定义的同时也可以初始化,如:
    _ConnectionPtr pConnection(__uuidof(Connection));
    _ConnectionPtr 是智能指针
    __uuidof() 用来获取Connection全局唯一标识符
     
    (3)
    _ConnectionPtr pConnection;
    _RecordsetPtr pRecordset;
    _CommandPtr pCommand;
     
    pConnection.CreateInstance("ADODB.Connection");
    pRecordset.CreateInstance("ADODB.Recordset");
    pCommand.CreateInstance("ADODB.Command");
     
    4、打开一个连接
    pConnection->ConnectionString = "这里的字符串有下面四种写法";//对连接字符串赋值
    pConnection->Open(ConnectionString,"","",adModeUnknown); //连接数据库
    第二三个参数分别为用户的ID与密码,
    因为在连接字符串ConnectionCstring中已经设置好了,这里可以为空。
    第四个参数可以取下面两个参数:
    adAsyncConnect 
    异步打开数据库,在ASP中直接用16
    adConnectUnspecified 
    同步打开数据库,在ASP中直接用-1
     
    ConnectionString根据不同的数据源,分别对应不同的写法
    (要记下来很困难,可以在VB中利用ADO控件先连接好,再将其拷贝在VC中,这样不容易出错)
        1)
    访问Access 2000
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord"
     
        2)
    访问ODBC数据
    "Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;"
     
       3)
    访问Oracle数据库
    “Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;"
     
       4)
    访问MS SQL数据库
    "Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;"
     
    5、执行SQL命令,得到数据
    方法1:
    pRecordset = pConnection->Execute("Select * from authors",NULL,adCmdText);
    方法2:
    pRecordset ->Open("Select * from authors",_
    variant_t((Idispacth*) pConnection), //设置活动连接
    adOpenDynamtic,
    //游标类型
    adLockOptimistic,
    //锁的类型
    adCmdText);
    方法3:
    pCommand->put_ActiveConnection(_variant_t((Idispatch *) pConn);
    pCommand->CommandText = "Select * from authors";
    pRecordset = pCmd->Execute(NULL,NULL,adCmdText);
     
     
    得到数据之后,做一个循环取得数据:
    While (!pRecordset ->adoEOF)
    {
    Str = pRecordset->GetCollect("au_lname"));
    pRst->MoveNext();
    }
    SQL命令比较多,但是不去考虑细节,这里只说出通用的方法
    CString strSQL;//定义SQL命令串,用来保存SQL语句
     
    strSQL.Format("SQL statement");
     
    然后在每个要用到SQL命令串的方法中,使用strSQL.AllocSysString()的方法进行类型转换
     
    6、com的专用数据类型
     
    variant ,bstr ,SafeArray
     
    variant变量的范围包括很多,它是一种变体类型,主要用于支持自动化的语言访问,
    从而在VB中非常方便地使用,但是VC中比较复杂,它使用_variant_t 进行管理
    bstr是一种字符串变量,使用_bstr_t进行管理,这个类重载了char *操作符
     
    7、关闭连接
     
    if(pConnection->State);     //不能多次关闭,否则会出现错误
    pConnection->Close(); 
    pRecordset->Close();
    pCommand.Release();
    pConnection.Release();
    //释放引用计数
    pRecordset.Release();
     
     
        注意:调用Close()时用"->",调用Release()时要用".",为什么?
    因为智能指针,_ConnectionPtr是一个重载了->运算符的类
     
    _ConnectionPtr:它是一个接口指针模板。'.'是模板_com_ptr的函数。->是'接口函数'调用。
    //forexample:
    _ConnectionPtr m_Conn;
    m_Conn.CreateInstance(....);//Createinterfaceinstance.
    m_Conn->Open(...);//Openaconnectiontodatabase.
     
    '->'是_com_ptr重载了的运算符.目的就是为了让你调用模板参数的函数.
     
    8、结构化异常处理
    ADO封装了COM接口,所以需要进行错误处理
    如下例:
    HRESULT hr;
    try
    {
    hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
    if(SUCCEEDED(hr))
    {
    hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb","","",adModeUnknown);///连接数据库
    ///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; }
    }
    catch(_com_error e)///捕捉异常
    {
    CString errormessage;
    errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
    AfxMessageBox(errormessage);///显示错误信息
      

  2.   

    ODBC数据源,连接数据源时候不自动生成CRecordset类的派生类,必须自己定义一个CMySet类(CRecordset的派生类),这里你可以手动完成你所需要的变量
    具体三步骤:
    1.CMySet类中先定义字符串对象
    这里定义的变量就是你要和数据库的表中字段名称一一对应的变量。
      2.DOFieldExchange函数中
    根据表中的数据类型完成转换。
      3.CMySet构造函数中添加代码
    完成变量的初始化以及变量的数目。这三个步骤你完全可以参照自动生成的CRecordset类的派生类。