能提一下这方面的资料吗?
最近遇到一个问题:我的数据库是用_ConnectionPtr m_pConnection连接,_RecordsetPtr m_pRecordset打开记录集,但是不知道怎么把记录集中的数据显示在DataGrid中.
那位大侠指点一下啊

解决方案 »

  1.   

    http://www.vckbase.com/document/viewdoc/?id=261
      

  2.   

    谢谢 但是这是DB Grid的 和Data Grid一样吗?
      

  3.   

    BOOL CDlgRecordset::QueryRecord()
    {
    _CommandPtr cmd;  
    _RecordsetPtr rs;  
    _ConnectionPtr conn; 
    _variant_t vra;
    VARIANT *vt1 = NULL;
    try
    {
    /* cmd.CreateInstance( __uuidof(Command));
    rs.CreateInstance(__uuidof(Recordset));
    conn.CreateInstance(__uuidof(Connection));*/ UpdateData(TRUE);
    theApp.m_pConnection->PutCursorLocation(adUseClient);

    /* conn->CursorLocation = adUseClient;

    conn->Open(_bstr_t( theApp.m_pConnection.GetInterfacePtr() ), L"", L"", -1);
    cmd->ActiveConnection = conn;

       cmd->CommandText = (_bstr_t) m_strQuery;
    cmd->CommandType = adCmdText;
    rs = cmd->Execute(&vra,vt1, adCmdText);*/
    /*rs->PutRefActiveConnection(theApp.m_pConnection);
    rs->Open((_bstr_t)m_strQuery,
    theApp.m_pConnection.GetInterfacePtr(),
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);*/
    ///     ((CTestDllApp*)(&theApp))->m_pConnection
    /// m_pRecordset.CreateInstance(__uuidof(Recordset));

    /* m_pRecordset->Open((_bstr_t)m_strQuery,
    _variant_t((IDispatch*)theApp.m_pConnection, TRUE),
    adOpenStatic,
    adLockOptimistic,
    adCmdText);*/
       if(m_pRecordset->State==1)
    {
    m_pRecordset->Close();
    }
    m_pRecordset->Open((_bstr_t)m_strQuery,
    theApp.m_pConnection.GetInterfacePtr(),//»ñÈ¡¿â½Ó¿âµÄIDispatchÖ¸Õë
    adOpenStatic,
    adLockOptimistic,
    adCmdText);
    /* m_DataGrid.SetRefDataSource(NULL);
    m_DataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_DataGrid.Refresh();*/
    }
    catch (_com_error &e)
    {
    ::MessageBox(NULL,e.Description(),"Ìáʾ",MB_OK);
    }

    m_DataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_DataGrid.Refresh();
    UpdateData(FALSE);
    //m_pRecordset->Close();
    return true;
     
    }
      

  4.   

    用DataGrid控件与数据库的动态连接
        工夫主要不在DataGrid控件,在Adoc控件上,在对话框内先加入一个Adoc控件
        Microsoft ADO Data Control 6.0 (SP4) (OLEDB)控件;(CAdoc)
        在加入一个DataGrid控件
        Microsoft DataGrid Control, Version 6.0 (OLEDB) (CDataGrid)
        (如果你乐意,还可以再加入一个图表控件,
        Microsoft Chart Control, version 6.0 (OLEDB))    加入控件后,先进行手工连接,如果已经设了数据源,那就好办了,鼠标右击ADO控件,弹出菜单,选择属性,弹出属性页对话框    一,选择ADO控件的Control属性页,选择Use Connect String单选按钮,然后单击Build按钮,弹出数据连接属性对话框,在“提供者”属性页,一般选择“Microsoft OLE DB Provider for ODBC Drivers”,单击“下一步”按钮
    在连接属性页,选择最上边的下拉框中的预先设好的数据源名,单击“测试连接”按钮。(不成功时,在“提供者”属性页换新的选择)
        (产生的连接字符类似:
        Provider=MSDASQL.1;Persist Security Info=False;Data Source=ee)    二,选择ADO控件的Authentication属性页,输入用户名,和密码。    三,选择ADO控件的RecordSource属性页,在Command Type下拉框中,选择1-adCmdText然后在Command Text(SQL)编辑框中输入:
        Select * from 表名    然后关闭ADO控件的属性页对话框,打开DataGrid控件的属性页对话框,选择DataGrid控件的All属性页,然后把DataGrid控件的DataSource属性设为IDC_ADODC1,就是ADO控件的ID号,DataSource属性在DataGrid控件的All属性页,第十一格,(类似的,如果你加入了Chart控件,可以同时把Chart控件的DataSource属性也设为IDC_ADODC1,Chart控件的DataSource属性,在Chart控件的All属性页,第十五格,不过注意,如果数据库的表中只有字符字段,Chart控件不会起作用)    然后编译执行,估计你会得到一个可以让你高兴一点的小程序。
      
        当然,我们还未达到动态连接的目的;    但胜利不远了,努力吧!    打开ClassWiard,选择Member Variables属性页。选择IDC_ADODC1 起名m_adoc,确定。加入后,想着包含头文件
    #include "Adoc.h"    然后写入,如下代码 
        void CMyDlg::OnOK() 
        {
             CString str ;
             //m_adoc.SetCommandType(1);可写可不写         //m_adoc.SetCommandType(1);,代表SQL命令类型是文本类型,随便写SQL命令语句,
             //m_adoc.SetCommandType(2);,代表查询整个表,
             //m_adoc.SetCommandType(4);,4,代表存储过程,这些概念
             //你在RecordSource属性手工设置时,会见到。         str = m_adoc.GetConnectionString();//
             AfxMessageBox(str);//可以看到str中的数据源
             //str = Provider=MSDASQL.1;Persist Security Info=False;Data Source=ee         //str=Provider=MSDASQL.1;Persist Security Info=False;Data Source=otherdatabase
             //用m_adoc.SetConnectionString(str)换库,换数据源         str = m_adoc.GetRecordSource();
             AfxMessageBox(str);//可以看到SQL语句str=select * from text
             str="select * from othertable ";
             m_adoc.SetRecordSource(str);//更新SQL语句
             m_adoc.Refresh();//刷新,不刷新不行,DataGrid就不知道SQL语句变了。
         }