在做一个简单的工资管理系统
我加了一个ADO类
之后在一个对话框类中使用ADO类
可以实现我的所有操作,但是在第二个对话框类中使用时就出错啊,
这是怎么回事啊,我明明是按第一个那样来做的啊,救命啊,在线=========================

解决方案 »

  1.   

     
    ADO::ADO()
    {}ADO::~ADO()
    {}void ADO::OnInitADOConn()
    {
    ::CoInitialize(NULL);
    try
    {
           m_pConnection.CreateInstance("ADODB.Connection");  //创建连接对象实例
       _bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
    uid=;pwd=;DBQ=teacher.mdb;";
       m_pConnection->Open(strConnect,"","",adModeUnknown); //打开数据库
    }
    catch(_com_error e)
    {
    AfxMessageBox(e.Description()); //弹出错误处理
    }
    }
    _RecordsetPtr&  ADO::OpenRecordset(CString sql)
    {
    ASSERT(!sql.IsEmpty()); //SQL语句不能为空
    try
    {
    m_pRecordset.CreateInstance(__uuidof(Recordset)); //创建记录集对象实例
    m_pRecordset->Open(_bstr_t(sql), m_pConnection.GetInterfacePtr(),
    adOpenDynamic, adLockOptimistic, adCmdText);  //执行SQL得到记录集
    }
    catch(_com_error e) //捕获可能的异常
    {
    AfxMessageBox(e.Description());
    }
    return m_pRecordset;
    }void ADO::CloseRecordset()
    {
    if(m_pRecordset->GetState() == adStateOpen) //判断当前的记录集状态
    m_pRecordset->Close(); //关闭记录集
    }
    void ADO::CloseConn()
    {
    m_pConnection->Close(); //关闭数据库连接
    ::CoUninitialize(); //释放COM环境
    }
    UINT ADO::GetRecordCount(_RecordsetPtr pRecordset)
    {
    int nCount = 0; //声明保存记录数的变量
    try{
    pRecordset->MoveFirst(); //将记录集指针移动到第一条记录
    }
    catch(...) //捕捉可能出现的错误
    {
    return 0; //产生错误时返回0
    }
    if(pRecordset->adoEOF) //判断记录集中是否没有记录
    return 0; //无记录时返回0
    while (!pRecordset->adoEOF) //当记录集指针没有指向最后时
    {
    pRecordset->MoveNext(); //将记录集指针移动到下一条记录
    nCount = nCount + 1; //记录个数的变量加1
    }
    pRecordset->MoveFirst(); //将记录集指针移动到第一条记录
    return nCount; //返回记录数
    }
    ado类
      

  2.   

    void CEmployeeinfor::AddToGrid()
    {
    ADO  m_Ado;
    m_Ado.OnInitADOConn();//连接数据库 CString SQL = "select * from Table_员工信息 order by 员工ID desc"; //设置查询字符串
    m_Ado.m_pRecordset=m_Ado.OpenRecordset(SQL);//打开记录集 while(!m_Ado.m_pRecordset->adoEOF)
    {
    m_List.InsertItem(0,"");//向列表视图控件中插进行
           //向列表视图控件中插进列
    m_List.SetItemText(0,0,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("员工ID"));
    m_List.SetItemText(0,1,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("员工姓名"));
    m_List.SetItemText(0,2,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("员工部门ID"));
            m_List.SetItemText(0,3,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("员工职务"));
            m_List.SetItemText(0,4,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("身份证号"));
            m_List.SetItemText(0,5,(char*)(_bstr_t)m_Ado.m_pRecordset->GetCollect("银行账号"));
     
    m_Ado.m_pRecordset->MoveNext();//将记录集指针移动到下一条记录
    }
    m_Ado.CloseRecordset();//关闭记录集
    m_Ado.CloseConn();//断开数据库连接
    }
    第一个对话框类中用的啊,当我在第二个里面这样用时就出错,在tab 控件的 第二个对话框中用就不行了
      

  3.   

    你可以在tab控件的父窗口保存m_Ado,然后两个对话框都可以用了
      

  4.   

    不过你确实没有必要每个对话框内都去创建数据库的ADO连接,可以在APP类中创建一份连接就行,其它类中直接使用即可。
      

  5.   

    不过你确实没有必要每个对话框内都去创建数据库的ADO连接,可以在APP类中创建一份连接就行,其它类中直接使用即可。
    怎么做啊,我新手啊,能详细些吗,哎,课程设计就没用一点自己学的