VC ADO dataGrid 数据库动态绑定

来源:互联网 发布:网络平台推广是什么 编辑:程序博客网 时间:2024/05/29 18:05

今天学习了一下ADO datagrid。其实没打算学习ADO,由于想做个表格,用了FlexGrid控件,发现不能选择不连续的多行。于是在网上寻找,datagrid可以,于是去找相关资料,发现datagrid全都是连接数据库,虽然不能满足我的要求,但还是学习了一下用ADO绑定数据库,在通过与datagrid绑定进行数据库信息显示。现总结如下,第一次写博客,献丑了。

 

新建一个基于对话框的vc工程,首先需要添加两个控件,ADO和datagrid。下面讲解绑定数据库及他们之间的绑定。

 

其实,不用任何代码,我们可以实现绑定一个数据库,并将其在datagrid中显示。利用ADO控件的属性设置可以实现与数据库的绑定。在设置datagrid的属性可以实现与ADO的绑定,运行就可以实现显示数据库中的数据了。

 

通过代码实现。

 

主要注意有三个智能指针:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。下面是以连接Access为例。

 

 

_ConnectionPtr m_pConnection;

// 初始化连接

::CoInitialize(NULL);

try

{

         m_pConnection.CreateInstance(__uuidof(Connection));

}

catch(_com_error e)

{

AfxMessageBox("dha");

return FALSE;

}

 

try                 

{

m_pConnection->Open(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ASIAa.mdb"),_T(""),_T(""),adModeUnknown);

}

catch(_com_error e)

{

TRACE("%s",e);

AfxMessageBox("Êý¾Ý¿âÁ¬½Óʧ°Ü£¬È·ÈÏÊý¾Ý¿âASIAa.mdbÊÇ·ñÔÚµ±Ç°Â·¾¶ÏÂ!");

return FALSE;

}      

_RecordsetPtr m_pRecordset;

m_pRecordset.CreateInstance(__uuidof(Recordset));

 

try

{

m_pRecordset->CursorLocation = adUseClient; 

// m_pRecordset=m_pConnection->Execute("Select * from ASIAa",NULL,adCmdText);              

        m_pRecordset->Open("Select * from ASIAa",m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

 

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());

}      

    while(!m_pRecordset->EndOfFile)

{

        AfxMessageBox((_bstr_t)m_pRecordset->GetCollect("Country"));

        break;

}

// m_ado.SetRecordSource()

m_dataGrid.SetRefDataSource(NULL);

m_dataGrid.SetRefDataSource((LPUNKNOWN)m_pRecordset);

m_dataGrid.ReBind();

m_dataGrid.Refresh();

CoUninitialize();

原创粉丝点击