一、閱讀本文所需注意的其它事項(xiàng)
1、進(jìn)行方法調(diào)用時(shí),所傳遞的參數(shù)的類(lèi)型的轉(zhuǎn)換(可能存在比本文更簡(jiǎn)便的處理方法但我未發(fā)現(xiàn))
2、每個(gè)源文件的每行注釋說(shuō)明了其文件名
3、請(qǐng)關(guān)注相關(guān)頭文件包含關(guān)系
4、請(qǐng)關(guān)注文中所有中文注釋
5、更多的內(nèi)容請(qǐng)參閱 "VC安裝目錄\Include\adoint.h"文件,adoint即ActiveX Data Object
InterFace(菜 鳥(niǎo)請(qǐng)勿驚慌,這僅僅只是個(gè)名稱)
二、下面的源文件與您的數(shù)據(jù)庫(kù)應(yīng)用程序不直接相關(guān),但其目標(biāo)代碼(生成的.obj文件)是您必需的,請(qǐng)參考
file://Ado.cpp文件///////////////////////////////////////////
#include
#include
#include
該文件使用方法:新建一個(gè)空的MFC工程,將此文件添加到該工程中,編譯生成Ado.obj文件,再將此.obj文件添加到您的數(shù)據(jù)庫(kù)應(yīng)用程序.該源文件在您的數(shù)據(jù)庫(kù)應(yīng)用程序中是不需要的。
三、下面是與您的數(shù)據(jù)庫(kù)應(yīng)用程序源文件相關(guān)代碼(非所有代碼)
復(fù)制代碼 代碼如下:
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://請(qǐng)注意這里
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include
file://3、數(shù)據(jù)庫(kù)應(yīng)用程序.h文件///////////////////////////////////////////////
file://以下為用到的若干相關(guān)數(shù)據(jù)庫(kù)引用變量(聲明在其頭文件中)
ADOField* pfd;
ADOFields* pfds;
CString m_dbfile;
ADORecordset* prs;
ADOConnection* pdb;
file://4、數(shù)據(jù)庫(kù)應(yīng)用程序.cpp文件/////////////////////////////////////////////
#include "stdafx.h"
#include "數(shù)據(jù)庫(kù)應(yīng)用程序.h"
file://這里添加其它相關(guān)頭文件
file://以下為該.cpp文件中若干自定義或非自定義的方法,與數(shù)據(jù)庫(kù)連接相關(guān)
file://其中每一條語(yǔ)句都有含義,請(qǐng)關(guān)注其中的注釋
BOOL CBKDlg::InitDataEnv()
{
file://下面定義了一個(gè)簡(jiǎn)單的連接字符串,當(dāng)然還有更復(fù)雜的
CString s=_T("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=d:\\data\\資料借閱管理.mdb");
::CoInitialize (NULL);//初始化COM環(huán)境
CoCreateInstance(CLSID_CADOConnection,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOConnection15,
(LPVOID*)pdb
);//初始化一個(gè)ADO連接
CoCreateInstance(CLSID_CADORecordset,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADORecordset,
(LPVOID*)prs
);//初始化一個(gè)ADO數(shù)據(jù)集
CoCreateInstance(CLSID_CADOField,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOFields,
(LPVOID*)pfds
);//初始化一個(gè)ADO數(shù)據(jù)域集合(域即是Fox中的字段,下同)
CoCreateInstance (CLSID_CADOField,
NULL,
CLSCTX_INPROC_SERVER,
IID_IADOField,
(LPVOID*)pfd
);//初始化一個(gè)ADO數(shù)據(jù)域集合中的一個(gè)域
file://打開(kāi)上述ADO連接
pdb->Open((unsigned short*)(LPCSTR)s,(unsigned short*)"",(unsigned short*)"",0);
file://打開(kāi)上述ADO數(shù)據(jù)集,但它的連接參數(shù)是使用的上述字符串
file://應(yīng)當(dāng)存在以上面的連接替換該字符串的方法,但我沒(méi)找到
prs->Open(COleVariant(_T("資料信息")),COleVariant(s),adOpenKeyset,adLockOptimistic,adCmdTable);
file://數(shù)據(jù)集的域不存在打開(kāi)與否,只需直接到已打開(kāi)的數(shù)據(jù)集中引用即可,詳情請(qǐng)見(jiàn)
file://CBKDlg::OnBeforeColUpdateDatagrid方法
m_dg.ClearFields ();//MS DATAGRID 控件(Activex)的數(shù)據(jù)清空
m_dg.SetRefDataSource(prs); file://上述控件與數(shù)據(jù)集的綁定
return TRUE;
}
BOOL CBKDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
m_dg.SetRefDataSource(NULL);
long state;
file://下面的處理可能存在邏輯上的錯(cuò)誤,不過(guò)關(guān)閉數(shù)據(jù)集與數(shù)據(jù)連接的語(yǔ)法是正確的
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環(huán)境
return CDialog::DestroyWindow();
}
void CBKDlg::OnBeforeColUpdateDatagrid(short ColIndex, VARIANT FAR* OldValue, short FAR* Cancel)
{
file://該事件(方法)在MS DATAGRID 控件(ActiveX)的單元數(shù)據(jù)更新前發(fā)生
file://該事件您可能用不著,但其中的代碼您可能用得著
COleVariant v((LPCSTR)m_dg.GetText ());//獲取上述控件當(dāng)前單元格的數(shù)據(jù)
CString fieldname=m_dg.GetColumns().GetItem(COleVariant(ColIndex)).GetCaption();
DataTypeEnum fieldtype;//描述ADO數(shù)據(jù)類(lèi)型的枚舉類(lèi)型
prs->get_Fields(pfds);//從數(shù)據(jù)集中獲得數(shù)據(jù)域集合
pfds->get_Item (COleVariant(fieldname),pfd);//從數(shù)據(jù)域集合中獲得特定名稱的域
pfd->get_Type (fieldtype);//從上述域中獲取其數(shù)據(jù)類(lèi)型,如整型或字符串型
switch (fieldtype){
case adSmallInt:
case adInteger:
break;
case adDate:
break;
case adCurrency://Data type describing for Money ,Understand?
break;
case adVarChar://對(duì)應(yīng)于VB中的String類(lèi)型和VC中的CString類(lèi)型
break;
default:
break;
}
}//該方法來(lái)源于MS DataGrid ActiveX控件的事件,無(wú)具體的處理代碼,望海涵
您可能感興趣的文章:- VC基于ADO技術(shù)訪問(wèn)數(shù)據(jù)庫(kù)的方法
- VC實(shí)現(xiàn)ODBC數(shù)據(jù)庫(kù)操作實(shí)例解析
- c++連接mysql數(shù)據(jù)庫(kù)的兩種方法(ADO連接和mysql api連接)
- 用C語(yǔ)言操作MySQL數(shù)據(jù)庫(kù)的通用方法
- C語(yǔ)言連接并操作Sedna XML數(shù)據(jù)庫(kù)的方法
- c語(yǔ)言連接mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
- VC中使用ADO開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序簡(jiǎn)明教程