• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • VC用Ado接口連接和使用數據庫

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    天極網 李治國 一、閱讀本文所需注意的其它事項: 1、進行方法調用時,所傳遞的參數的類型的轉換(可能存在比本文更簡便的處理方法但我未發現) 2、每個源文件的每行注釋說明了其文件名 3、請關注相關頭文件包含關系 4、請關注文中所有中文注釋 5、更多的內容請
    天極網 李治國

      一、閱讀本文所需注意的其它事項:

      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控件的事件,無具體的處理代碼,望海涵

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>