有家真好读后感:VC 数据库 listctrl

来源:百度文库 编辑:中财网 时间:2024/05/05 20:38:21

今天在网上看了很多有关VC连接数据库的例子,但是大部分都是给出了代码,但是没有很详细地讲解了如何连接数据库,这就是我为什么要写这篇文章,特别适合初学者,看这里你无需要懂得是什么意思,尽管跟着步骤一步一步走那么你就可以连接成功!

首先在VC++中建立一个基于对话框的工程(在这里取名为sjtest)

1、 StdAfx.h头文件中导入msado15.dll文件。(代码如下)

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace \

rename("EOF","adoEOF")rename("BOF","adoBOF")

2、 在主窗口类声明两个变量。(CsjtestDlg.h)

代码:

_ConnectionPtr m_pConnection;

       _RecordsetPtr m_pRecordset;

关于_ConnectionPtr _RecordsetPtr 两个智能指针具体作用网上很多,我不详述。想了解的请读者自己查询,本文旨在为大家建立起数据库连接并且显示出来!

3、 在对话框中添加一个ListControl控件,并且将其属性中的Style设置如图

View设置成Report,Single selection,auto arrange no label wrap勾上!


4、 CLASS WIZARD里面添加一个和LISTCONTROL想关联的变量m_Grid


5、在CSjtestApp应用程序类中的初始化函数InitInstance()中初始化COM环境

在上面添加:       ::CoInitialize(NULL);

并在return之前释放:添加代码如下:    ::CoUninitialize();

5、 建立ADO连接数据库函数

在主窗口类(CSjktestDlg)库中添加函数OnInitADOConn()如图:


并在该函数添加如下代码:

       try

       {

              //创建连接对象实例

              m_pConnection.CreateInstance("ADODB.Connection");

              //设置连接字符串

              CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\

                     uid=;pwd=;DBQ=shujuku.mdb;";

              //使用Open方法连接数据库

              m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);

       }

       catch(_com_error e)

       {

              AfxMessageBox("连接数据失败,请检查数据库路径是否正确!");

       }

在这里我的数据名字为shujuku.mdb,当然CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};    uid=;pwd=;DBQ=shujuku.mdb;";也可以使用如下字符串连接

       CString strConnect="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=shujuku.mdb;Persist Security Info=False";代替

6、 按照第五步那样建立关闭记录集和连接函数ExitConnect()并添加代码:

       //关闭记录集和连接

    if(m_pRecordset!=NULL)

              m_pRecordset->Close();

       m_pConnection->Close();

7、 接着在初始化对话框中调用OnInitADOConn函数,已经获取数据库表中数据并显示在列表控件中。代码如下:

       m_Grid.SetExtendedStyle(LVS_EX_FLATSB

              |LVS_EX_FULLROWSELECT

              |LVS_EX_HEADERDRAGDROP

              |LVS_EX_ONECLICKACTIVATE

              |LVS_EX_GRIDLINES);

       m_Grid.InsertColumn(0,"员工编号",LVCFMT_LEFT,80,0);

       m_Grid.InsertColumn(1,"员工姓名",LVCFMT_LEFT,80,1);

       m_Grid.InsertColumn(2,"所属部门",LVCFMT_LEFT,80,2);

       m_Grid.InsertColumn(3,"基本工资",LVCFMT_LEFT,80,3);

       //连接数据库

       OnInitADOConn();

       //设置查询字符串

       _bstr_t bstrSQL = "select * from employees order by 员工编号 desc";

       //创建记录集指针对象实例

       m_pRecordset.CreateInstance(__uuidof(Recordset));//该句也可以使用

//     m_pRecordset.CreateInstance(“ADODB.Recordset”);代替

       //打开记录集

       m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,

              adLockOptimistic,adCmdText);

       while(!m_pRecordset->adoEOF)

       {

              m_Grid.InsertItem(0,"");

              m_Grid.SetItemText(0,0,(char*)(_bstr_t)m_pRecordset->GetCollect("员工编号"));

              m_Grid.SetItemText(0,1,(char*)(_bstr_t)m_pRecordset->GetCollect("员工姓名"));

              m_Grid.SetItemText(0,2,(char*)(_bstr_t)m_pRecordset->GetCollect("所属部门"));

              m_Grid.SetItemText(0,3,(char*)(_bstr_t)m_pRecordset->GetCollect("基本工资"));

              //将记录集指针移动到下一条记录

              m_pRecordset->MoveNext();

       }

       //断开数据库连接

       ExitConnect();

8、 编译运行,就可以看到结果啦。

文章引用:http://hi.baidu.com/forpig/blog/item/2400eaf719c7e12b720eeca7.html