我想要动态的指定要使用要用那个Ado,试了好多方法都不行,大家帮帮忙.

解决方案 »

  1.   

    m_pCon.CreateInstance("ADODB.Connection");
    m_pCon->PutCursorLocation(adUseClient); //
    m_pCon->Open()m_datagrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);
    m_datagrid.ReBind();
      

  2.   

    在一个对话框中放了一个DataGrid和ADO分别与m_datagrid和m_adodc绑定
    以下是InitDialog中的部分代码////设置ado数据源信息:
    m_adodc.SetConnectionString("Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=ts_xt;Data Source=LP");
    m_adodc.SetCommandType(1);
    m_adodc.SetRecordSource("Select * from Books") ;
    m_adodc.Refresh(); 
        }

    我是想如何用动态的方法使m_datagrid指向这个Ado?
    因为没有SetDataSource()事件,初学者大家能否写详细点,问题没有想的那么复杂.
      

  3.   

    借宝地
    再问两个问题
    1.
    m_pRecordset->CursorLocation = adUseClient;
    m_DataGridCtrl.SetRefDataSource(NULL);
    m_DataGridCtrl.SetRefDataSource((LPUNKNOWN) m_pRecordset);为什么加m_pRecordset->CursorLocation = adUseClient;
    这句是什么意思?不加这句,弹出错误“The rowset is not bookmakable!”2.
    在绑定数据源后
    m_pConnection->Close();关闭连接后,DataGrid的数据空了,不知道为什么?
      

  4.   

    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;
     
    }
      

  5.   

    在vc里面用数据库控件,不如用c++b or delphi
      

  6.   

    回复人:whutcl8110(whut) ( 一级(初级)) 信誉:100  2006-6-2 14:32:04  得分:0
    ? 1.  m_pRecordset->CursorLocation = adUseClient
    把从数据库取到的记录集放在你本地缓冲区,这是你用datagrid是必须这么设置。
    2. 你的datasource都没有了,可能datagrid自动做了清空。