视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
VC用Ado接口连接和使用数据库及注意事项
2020-11-27 22:42:06 责编:小采
文档

一、阅读本文所需注意的其它事项
  1、进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现)
  2、每个源文件的每行注释说明了其文件名
  3、请关注相关头文件包含关系
  4、请关注文中所有中文注释
  5、更多的内容请参阅 "VC安装目录\Include\adoint.h"文件,adoint即ActiveX Data Object
  InterFace(菜 鸟请勿惊慌,这仅仅只是个名称)

二、下面的源文件与您的数据库应用程序不直接相关,但其目标代码(生成的.obj文件)是您必需的,请参考
  file://Ado.cpp文件///////////////////////////////////////////
  #include
  #include
  #include
  该文件使用方法:新建一个空的MFC工程,将此文件添加到该工程中,编译生成Ado.obj文件,再将此.obj文件添加到您的数据库应用程序.该源文件在您的数据库应用程序中是不需要的。

三、下面是与您的数据库应用程序源文件相关代码(非所有代码)
代码如下:


  file://1、ado.h文件////////////////////////////////////////
  #ifndef __ADO__H__LZG
  #define __ADO__H__LZG
  #include
  #include
  #include
  #endif
  file://2、stdafx.h文件////////////////////////////////////////
  #if _MSC_VER > 1000
  #pragma once
  #endif // _MSC_VER > 1000
  #define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
  #include // MFC core and standard components
  #include // MFC extensions
  #include // MFC Automation classes
  #include // MFC support for Internet Explorer 4 Common Controls
  #include "ado.h" file://请注意这里
  #ifndef _AFX_NO_AFXCMN_SUPPORT
  #include
  file://3、数据库应用程序.h文件///////////////////////////////////////////////
  file://以下为用到的若干相关数据库引用变量(声明在其头文件中)
  ADOField* pfd;
  ADOFields* pfds;
  CString m_dbfile;
  ADORecordset* prs;
  ADOConnection* pdb;
  file://4、数据库应用程序.cpp文件/////////////////////////////////////////////
  #include "stdafx.h"
  #include "数据库应用程序.h"
  file://这里添加其它相关头文件
  file://以下为该.cpp文件中若干自定义或非自定义的方法,与数据库连接相关
  file://其中每一条语句都有含义,请关注其中的注释
  BOOL CBKDlg::InitDataEnv()
  {
   file://下面定义了一个简单的连接字符串,当然还有更复杂的
   CString s=_T("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=d:\\data\\资料借阅管理.mdb");
   ::CoInitialize (NULL);//初始化COM环境
   CoCreateInstance(CLSID_CADOConnection,
   NULL,
   CLSCTX_INPROC_SERVER,
   IID_IADOConnection15,
   (LPVOID*)&pdb
   );//初始化一个ADO连接
  CoCreateInstance(CLSID_CADORecordset,
   NULL,
   CLSCTX_INPROC_SERVER,
   IID_IADORecordset,
   (LPVOID*)&prs
   );//初始化一个ADO数据集
  CoCreateInstance(CLSID_CADOField,
   NULL,
   CLSCTX_INPROC_SERVER,
   IID_IADOFields,
   (LPVOID*)&pfds
   );//初始化一个ADO数据域集合(域即是Fox中的字段,下同)
  CoCreateInstance (CLSID_CADOField,
   NULL,
   CLSCTX_INPROC_SERVER,
   IID_IADOField,
   (LPVOID*)&pfd
   );//初始化一个ADO数据域集合中的一个域
  file://打开上述ADO连接
  pdb->Open((unsigned short*)(LPCSTR)s,(unsigned short*)"",(unsigned short*)"",0);
   file://打开上述ADO数据集,但它的连接参数是使用的上述字符串
  file://应当存在以上面的连接替换该字符串的方法,但我没找到
  prs->Open(COleVariant(_T("资料信息")),COleVariant(s),adOpenKeyset,adLockOptimistic,adCmdTable);
  file://数据集的域不存在打开与否,只需直接到已打开的数据集中引用即可,详情请见
  
  file://CBKDlg::OnBeforeColUpdateDatagrid方法
  m_dg.ClearFields ();//MS DATAGRID 控件(Activex)的数据清空
  m_dg.SetRefDataSource(prs); file://上述控件与数据集的绑定
  return TRUE;
  }
  BOOL CBKDlg::DestroyWindow()
   {
    // TODO: Add your specialized code here and/or call the base class
    m_dg.SetRefDataSource(NULL);
    long state;
    file://下面的处理可能存在逻辑上的错误,不过关闭数据集与数据连接的语法是正确的
    if(!FAILED(prs->get_State(&state)))
     if(state!=adStateClosed)
      {
       prs->Close();
       prs=NULL;
      }
     if(!FAILED(pdb->get_State(&state)))
      if(state!=adStateClosed)
      {
       pdb->Close();
       pdb=NULL;
      }
     ::CoUninitialize ();//释放COM环境
     return CDialog::DestroyWindow();
    }
    void CBKDlg::OnBeforeColUpdateDatagrid(short ColIndex, VARIANT FAR* OldValue, short FAR* Cancel)
   {
    file://该事件(方法)在MS DATAGRID 控件(ActiveX)的单元数据更新前发生
    file://该事件您可能用不着,但其中的代码您可能用得着
    COleVariant v((LPCSTR)m_dg.GetText ());//获取上述控件当前单元格的数据
    CString fieldname=m_dg.GetColumns().GetItem(COleVariant(ColIndex)).GetCaption();
    DataTypeEnum fieldtype;//描述ADO数据类型的枚举类型
    prs->get_Fields(&pfds);//从数据集中获得数据域集合
    pfds->get_Item (COleVariant(fieldname),&pfd);//从数据域集合中获得特定名称的域
    pfd->get_Type (&fieldtype);//从上述域中获取其数据类型,如整型或字符串型
    switch (fieldtype){
     case adSmallInt:
     case adInteger:
          break;
     case adDate:
          break;
     case adCurrency://Data type describing for Money ,Understand?
          break;
     case adVarChar://对应于VB中的String类型和VC中的CString类型
          break;
     default:
          break;
     }
    }//该方法来源于MS DataGrid ActiveX控件的事件,无具体的处理代码,望海涵

下载本文
显示全文
专题