VC++ ADO数据库 FlexGrid控件

本文档介绍了如何使用VC++的ADO库进行数据库编程,包括数据库连接、数据添加与删除,以及数据在FlexGrid控件中的显示。通过创建ADO连接、命令、记录集变量,实现了对Access数据库的操作,如打开数据库、执行SQL命令、动态更新FlexGrid控件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

耗费了一下午,研究了一下VC的数据库编程,写了这个测试程序。主要的功能为实现access数据库的添加与删除,同时动态的将数据库数据显示在flexgrid控件中。下面把过程记录下来,以备后用。

一。ADO简介
 ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序。关于OLE DB和ADO的其它详细情况,读者可以自行查阅相关书籍或MSDN,这里就不一一说明了。让我们直接步入主题,如何掌握ADO这种数据库访问技术ADO的操作方法和前面讲过的DAO的操作在很多方面存在相似之处。
二。主要控件的布置
程序运行效果如图:


1.进入工程向导,建立基于对话框的mfc应用程序。名为databasetest。
加入flexgrid控件:工程--->添加到工程------->components and controls。找到Microsoft Flexgrid control,然后insert。添加几个static box 和editbox,添加两个botton,实现插入和删除的功能。
2.打开access2003,建立空数据库Demo.mdb。建立表Table1。设置编号,时间,采样点数,累加次数,数据5个字段,分别为自动编号,时间/日期,数字,数字和备注类型
如图:


三。数据库操作过程
1.用#import指令引入ADO类型库
要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用 #import引用它既可。可以直接在Stdafx.h文件中加入下面语句来实现:

#import "c:/program files/common files/system/ado/msado15.dll" /
no_namespace /
rename ("EOF", "adoEOF")


  其中路径名可以根据自己系统安装的ADO支持文件的路径来自行设定。当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵数LoadTypeLib()。#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。语句no_namespace说明ADO对象不使用命名空间,rename ("EOF", "adoEOF")说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。
2.COM初始化
使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成。代码如下:
BOOL CDatabasetestApp::InitInstance()
{
   ................................
   AfxOleInit();
..................................
}
3.CDatabasetestDlg.h中定义个控件类变量

 // 定义ADO连接、命令、记录集变量指针
 _ConnectionPtr m_pConnection;
 _CommandPtr  m_pCommand;
 _RecordsetPtr m_pRecordset;

// Dialog Data
 //{ {AFX_DATA(CDatabasetestDlg)
 enum { IDD = IDD_DATABASETEST_DIALOG };
 CEdit m_CSamplingTime;
 CString m_SamplingTime;
 UINT m_AccNum;
 UINT m_SamplingNum;
 CMSFlexGrid m_DataGrid;
 //}}AFX_DATA

 // ClassWizard generated virtual function overrides
 //{ {AFX_VIRTUAL(CDatabasetestDlg)

4.这样就可以数据库的实际操作了。首先在主应用程序databasetext.cpp中。主对话框弹出之前添加代码,创建一个实例指针,再用Open打开一个库连接,它将返回一个IUnknown的自动化接口指针

 m_pConnection.CreateInstance(__uuidof(Connection));

 // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
 // 因为它有时会经常出现一些想不到的错误。jingzhou xu
 try                 
 { 
  // 打开本地Access库Demo.mdb
  m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb","","",adModeUnknown);
  
 }
 catch(_com_error e)
 {
  AfxMessageBox(e.ErrorMessage()); 
 }

注:ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句(用法和_CommandPtr中的Execute方法类似)。

5.在databasetestDlg.cpp的前面加入:

//引用应用类
extern CDatabasetestApp theApp;

在::OnInitDialog()加入代码:

// 使用ADO创建数据库记录集
 m_pRecordset.CreateInstance(__uuidof(Recordset));

 // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
 // 因为它有时会经常出现一些想不到的错误。jingzhou xu
 try
 {
  m_pRecordset->CursorLocation = adUseClient;
  m_pRecordset->Open("SELECT * FROM Table1",                // 查询DemoTable表中所有字段
       theApp.m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针
       adOpenDynamic,
       adLockOptimistic,
       adCmdText);
 }
 catch(_com_error *e)
 {

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值