能提一下这方面的资料吗?
最近遇到一个问题:我的数据库是用_ConnectionPtr m_pConnection连接,_RecordsetPtr m_pRecordset打开记录集,但是不知道怎么把记录集中的数据显示在DataGrid中.
那位大侠指点一下啊
最近遇到一个问题:我的数据库是用_ConnectionPtr m_pConnection连接,_RecordsetPtr m_pRecordset打开记录集,但是不知道怎么把记录集中的数据显示在DataGrid中.
那位大侠指点一下啊
{
_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;
}
工夫主要不在DataGrid控件,在Adoc控件上,在对话框内先加入一个Adoc控件
Microsoft ADO Data Control 6.0 (SP4) (OLEDB)控件;(CAdoc)
在加入一个DataGrid控件
Microsoft DataGrid Control, Version 6.0 (OLEDB) (CDataGrid)
(如果你乐意,还可以再加入一个图表控件,
Microsoft Chart Control, version 6.0 (OLEDB)) 加入控件后,先进行手工连接,如果已经设了数据源,那就好办了,鼠标右击ADO控件,弹出菜单,选择属性,弹出属性页对话框 一,选择ADO控件的Control属性页,选择Use Connect String单选按钮,然后单击Build按钮,弹出数据连接属性对话框,在“提供者”属性页,一般选择“Microsoft OLE DB Provider for ODBC Drivers”,单击“下一步”按钮
在连接属性页,选择最上边的下拉框中的预先设好的数据源名,单击“测试连接”按钮。(不成功时,在“提供者”属性页换新的选择)
(产生的连接字符类似:
Provider=MSDASQL.1;Persist Security Info=False;Data Source=ee) 二,选择ADO控件的Authentication属性页,输入用户名,和密码。 三,选择ADO控件的RecordSource属性页,在Command Type下拉框中,选择1-adCmdText然后在Command Text(SQL)编辑框中输入:
Select * from 表名 然后关闭ADO控件的属性页对话框,打开DataGrid控件的属性页对话框,选择DataGrid控件的All属性页,然后把DataGrid控件的DataSource属性设为IDC_ADODC1,就是ADO控件的ID号,DataSource属性在DataGrid控件的All属性页,第十一格,(类似的,如果你加入了Chart控件,可以同时把Chart控件的DataSource属性也设为IDC_ADODC1,Chart控件的DataSource属性,在Chart控件的All属性页,第十五格,不过注意,如果数据库的表中只有字符字段,Chart控件不会起作用) 然后编译执行,估计你会得到一个可以让你高兴一点的小程序。
当然,我们还未达到动态连接的目的; 但胜利不远了,努力吧! 打开ClassWiard,选择Member Variables属性页。选择IDC_ADODC1 起名m_adoc,确定。加入后,想着包含头文件
#include "Adoc.h" 然后写入,如下代码
void CMyDlg::OnOK()
{
CString str ;
//m_adoc.SetCommandType(1);可写可不写 //m_adoc.SetCommandType(1);,代表SQL命令类型是文本类型,随便写SQL命令语句,
//m_adoc.SetCommandType(2);,代表查询整个表,
//m_adoc.SetCommandType(4);,4,代表存储过程,这些概念
//你在RecordSource属性手工设置时,会见到。 str = m_adoc.GetConnectionString();//
AfxMessageBox(str);//可以看到str中的数据源
//str = Provider=MSDASQL.1;Persist Security Info=False;Data Source=ee //str=Provider=MSDASQL.1;Persist Security Info=False;Data Source=otherdatabase
//用m_adoc.SetConnectionString(str)换库,换数据源 str = m_adoc.GetRecordSource();
AfxMessageBox(str);//可以看到SQL语句str=select * from text
str="select * from othertable ";
m_adoc.SetRecordSource(str);//更新SQL语句
m_adoc.Refresh();//刷新,不刷新不行,DataGrid就不知道SQL语句变了。
}