今天学习了一下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();