VC++使用ActiveX控件连接和操作数据库
VS2008运用ActiveX控件连接和操作数据库关闭时一直有个内存释放的错误,好像使用VC6.0会多生成2个文件,就不会有问题。
VC++使用ActiveX控件连接和操作数据库的方法分两种:
1.通过属性窗口连接数据库
2.通过代码连接数据库
1.通过属性窗口连接数据库
基本步骤:
(1)创建一个基于对话框的应用程序ActiveXDB;
(2)添加CAdodc控件:对话框上右键单击,选择Insert ActiveX control菜单项,弹出的对话框中选择Microsoft ADO Data Control version 6.0 , 单击"ok"按钮,成功添加一个CAdodc控件。
(3)使用CAdodc控件:首先需要连接数据库,然后传递SQL语句操作数据表。CAdodc控件右键属性,control中,点击use connection string,用build 设置一下。RecordSource中选择1-adCmdText,下面的框输入SQL执行语句。
(4)添加DATAGrid控件:对话框上右键单击,选择Insert ActiveX control菜单项,弹出的对话框中选择Microsoft DataGrid Control version 6.0 , 单击"ok"按钮,成功添加一个DATAGrid控件。
(5)使用DATAGrid控件显示数据集数据:DATAGrid控件通常与CAdodc控件或ADO对象Rescordset一起使用。因为上面创建好CAdodc控件,可以通过DataGrid控件的属性窗口将其绑定到CAdodc对象上。鼠标右键单击DATAGrid控件,点Edit DataGrid Object 菜单项,打开属性窗口;再选择“ALL”选项卡,选中DataSource属性,在Value列中单击,在显示的组合框中选择CAdodc控件的ID号。这样,DataGrid控件就关联到了CAdodc控件,即DATAGrid控件可以显示CAdodc控件对应的数据集数据。
2.通过代码连接数据库
基本步骤
(1)创建一个基于对话框的应用程序ActiveXDB;
(2)添加CAdodc控件,建立对应的控件变量m_adodc;添加DATAGrid控件,建立对应的控件变量m_adodc;属性不设置;
(3)控件所在的对话框,对应的cpp文件中OnInitDialog()函数,添加如下代码:
BOOL CActiveXDBDlg::OnInitDialog()
{
……
m_adodc.SetConnectionString("Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=suntest;Data Source=WWW-ED1F301E78B;Persist Security Info=False");
CString sql = "select * from 仓库3 order by 仓库编号 desc";
m_adodc.SetRecordSource(sql);
m_adodc.Refresh();
m_grid.SetRefDataSource(m_adodc.GetControlUnknown());
……
return TRUE;
}
Note:
网上和书上很多写的是m_adodc.GetRecordset(),用VC++编译出现错误提示:cannot convert parameter 1 from 'class C_Recordset' to 'struct IUnknown *'
原因:m_adodc.GetRecordset()的返回值是C_Recordset类型,而m_grid.SetRefDataSource(IUnknown *) 需要传入的参数是IUnknown 结构体,导致类型不匹配出错.