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