_ConnectionPtr cn;
_RecordsetPtr rs;
CString constr;
constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\Log.mdb;Persist Security Info=False";
cn.CreateInstance("ADODB.Connection");
rs.CreateInstance("ADODB.Recordset");
cn->Open(_bstr_t(constr),"","",adModeUnknown);
rs->Open(_variant_t("select * from eventlog"),(IDispatch*)cn,adOpenStatic,adLockUnspecified,adCmdText);
m_ctlDataBrid.SetRefDataSource((IDispatch *)rs);没有报错,数据库和表里都有数据的,但界面上却没有返回值

解决方案 »

  1.   

    用了这个m_ctlDataBrid.Refresh();也不行,我用MessageBox(...)已经看到rs有数据了,但DBGRID中就是显示不出来,不知何解?
      

  2.   

    还是到http://www.vckbase.com/document/viewdoc/?id=668里找一份高人写好的Ado类吧
      

  3.   

    在rs->Open(_variant_t("select * from eventlog"),(IDispatch*)cn,adOpenStatic,adLockUnspecified,adCmdText);
    前面添加:
    rs->CursorLocation = adUseClient; 试试
      

  4.   

    多谢tabby(-_-! .. 内存泄漏) ,问题解决了,也多谢winpzs(1st) 提供这样的范例,但我总希望能自己直接写,要不我用delphi算了。还有一个问题:用DataGrid就可以,但用DBGrid控件就提示“不支持此接口”,不知道是什么原因呢,我已经用了m_dbgrid.SetDataSource((LPUNKNOWN)rs);也不行,多谢指教。
      

  5.   

    1.stdafx.h中加入
    #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") 
    2.app文件的InitInstance中加入
    CString strConnection = "driver={SQL Server};Server=192.168.0.100;DATABASE=date;UID=sa";//sql2000
    try
    {
    hr = m_pConnTemp.CreateInstance("ADODB.Connection"); if(SUCCEEDED(hr))
    {
    hr=m_pConnTemp->Open((_bstr_t)strConnection,"","",adModeUnknown);
    }
    }
    catch(_com_error e)
    {
    CCommon common;
    AfxMessageBox(common.DisplayAdoError(m_pConnTemp));

    if (m_pConnTemp != NULL)
    {
    if (m_pConnTemp->State)
    {
    if (m_pConnection != NULL)
    {
    if (m_pConnection->State)
    {
    m_pConnection->Close ();
    }
    }
    m_pConnection = m_pConnTemp;
    }
    }