• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    VC用Ado接口连接和使用数据库及注意事项
    POST TIME:2021-10-18 03:10
    一、阅读本文所需注意的其它事项
      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控件的事件,无具体的处理代码,望海涵
    您可能感兴趣的文章:
    • VC基于ADO技术访问数据库的方法
    • VC实现ODBC数据库操作实例解析
    • c++连接mysql数据库的两种方法(ADO连接和mysql api连接)
    • 用C语言操作MySQL数据库的通用方法
    • C语言连接并操作Sedna XML数据库的方法
    • c语言连接mysql数据库的实现方法
    • VC中使用ADO开发数据库应用程序简明教程
    上一篇:.Net中如何操作IIS的虚拟目录原理分析及实现方案
    下一篇:防止在服务器处理完成之前用户多次点击提交按钮处理代码
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信