这是老问题了~~可实在没法找到资料~~~死活邦不上~~~
难就没有个野驴了么~~~能野一把~~~
来个野驴~~帮忙解决一下~~
小弟叩谢了~~Code 1:
/*
m_pRecordset是_RecordsetPtr
m_ctlGrid是DBGrid Control
*/
m_ctlGrid.SetDataSource(NULL);
m_ctlGrid.SetDataSource((LPUNKNOWN)m_pRecordset->GetDataSource());
m_ctlGrid.Refresh();结果:不支持此接口Code 2:
/*
m_pRecordset是_RecordsetPtr
m_ctlGrid是DBGrid Control
*/
m_ctlGrid.SetDataSource(NULL);
m_ctlGrid.SetDataSource((LPUNKNOWN)m_pRecordset);
m_ctlGrid.Refresh();结果:不支持此接口(这种是在网站上查的)

解决方案 »

  1.   

    m_pCon.CreateInstance("ADODB.Connection");
    m_pCon->PutCursorLocation(adUseClient); 
    m_pCon->Open()
    .........
    m_ctlGrid.SetDataSource(NULL);
    m_ctlGrid.SetDataSource((LPUNKNOWN)m_pRecordset);
    m_ctlGrid.ReBind(); //不是必须
    m_ctlGrid.Refresh();
      

  2.   

    根本行不通~~~
    m_ctlGrid.SetDataSource(NULL);
    m_ctlGrid.SetDataSource((LPUNKNOWN)m_pRecordset);/*已经置出错误了*/
    m_ctlGrid.ReBind(); //不是必须
    m_ctlGrid.Refresh();
      

  3.   

    我看着是老问题了~~~
    已经换了N个Grid控件~~难道_RecordsetPtr不支持数据源!?
    忘了说了~~
    GetDataSource()返回的是IUnknownPtr智能指针~
      

  4.   

    到底有没有位野驴啊~~~~
    莫非都不玩ADO接口么~~~非B我用VB~~~55555555555555555555555555
      

  5.   

    我看CSDN也没啥老手了~~~高手就更别提了~~
    有点垃圾了~~~
      

  6.   

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

  7.   

    太平洋,You够野的,代码一大坨,都说到“m_DataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);”报错了。先说说,用啥网格控件的?本人不才,我改使CListCtrl了~~活的不行,老汉我玩死的~~~-_-Zzzzz/////////////////////////////////////////////////////////////////////////////
    //函数名称:ReadData
    //函数功能:读取数据
    //函数参数:无
    //函数返回:无
    /////////////////////////////////////////////////////////////////////////////
    void CDemoProjectView::ReadData(void)
    {
    if(m_cAdo.GetRecoPtr() == NULL) return; CListCtrl& ctl = GetListCtrl();
    ctl.DeleteAllItems(); long nOrder = 0;
    int nCount = m_cAdo.GetFieldCount();
    int nWidth[10] = {0}; try
    {
    m_cAdo.MoveFirst();
    while(!m_cAdo.adoEOF())
    {
    LV_ITEM item;
    //if(nOrder > 50) return;
    for(int i = 0; i < nCount; i++)
    {
    _variant_t var;
    CString strData("");
    CString strName(""); strName = m_cAdo.GetFieldName(i);
    m_cAdo.GetCollect((LPCTSTR)strName, var);
    if(var.vt != VT_NULL) strData = (CString)var; item.mask = LVIF_TEXT;
    item.iItem = nOrder;
    item.iSubItem = i;
    item.pszText = (LPSTR)(LPCTSTR)strData;

    if(i == 0)
    ctl.InsertItem(&item);
    else
    ctl.SetItem(&item); ctl.GetStringWidth((LPCTSTR)item.pszText);
    ctl.SetColumnWidth(i, 80);
    }
    nOrder++;
    m_cAdo.MoveNext();
    }
    ctl.Update(ctl.GetItemCount());
    ctl.UpdateWindow();
    }
    catch(...)
    {
    ::AfxMessageBox("读取数据时出错!");
    }
    }
      

  8.   

    我这儿没错啊,VC++6.0,win2000
      

  9.   

    难道是我系统问题???
    偶用的VS2005.NET、WindowsXP,控件是DBGrid。
    恩~~奇怪,为啥能抱错呢~~~~
    不可能~~~~
      

  10.   

    syy64(太平洋)用的是 Data Grid Control
      

  11.   

    呵呵,你用的vs2005里面已经用GridView控件替换了原来vs.net7.0中的DataGrid,但是换过来也可以一样用。
    你用GridView来充当DataGrid就行了