分享
 
 
 

VC中用Ado接口代码连接和使用与数据库

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

标题:VC中用Ado接口代码连接和使用与数据库

一、阅读本文所需注意的其它事项:

1、进行方法调用时,所传递的参数的类型的转换(可能存在比本文更简便的处理方法但我未发现)

2、每个源文件的每行注释说明了其文件名

3、请关注相关头文件包含关系

4、请关注文中所有中文注释

5、更多的内容请参阅 "VC安装目录\Include\adoint.h"和"VC安装目录\Include\adoid.h"文件,adoint即ActiveX Data Object InterFace

二、下面的源文件与您的数据库应用程序不直接相关,但其目标代码(生成的.obj文件)是您必需的,请参考

//Ado.cpp文件///////////////////////////////////////////

#include <objbase.h>

#include <Initguid.h>

#include <adoid.h>

该文件使用方法:新建一个空的MFC工程,将此文件添加到该工程中,编译生成Ado.obj文件,再将此.obj文件添加到您的数据库应用程序.该源文件在您的数据库应用程序中是不需要的----作者

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

//1、ado.h文件////////////////////////////////////////

#ifndef __ADO__H__LZG

#define __ADO__H__LZG

#include <adoid.h>

#include <adoint.h>

#include <icrsint.h>

#endif

//2、stdafx.h文件////////////////////////////////////////

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers

#include <afxwin.h> // MFC core and standard components

#include <afxext.h> // MFC extensions

#include <afxdisp.h> // MFC Automation classes

#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls

#include "ado.h" //请注意这里

#ifndef _AFX_NO_AFXCMN_SUPPORT

#include <afxcmn.h>

//3、数据库应用程序.h文件/////////////////////////////////////////////////////////////////////

//以下为用到的若干相关数据库引用变量(声明在其头文件中)

ADOField* pfd;

ADOFields* pfds;

CString m_dbfile;

ADORecordset* prs;

ADOConnection* pdb;

//4、数据库应用程序.cpp文件/////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "数据库应用程序.h"

//这里添加其它相关头文件

//以下为该.cpp文件中若干自定义或非自定义的方法,与数据库连接相关

//其中每一条语句都有含义,请关注其中的注释

BOOL CBKDlg::InitDataEnv()

{

//下面定义了一个简单的连接字符串,当然还有更复杂的

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数据域集合中的一个域

//打开上述ADO连接

pdb->Open((unsigned short*)(LPCSTR)s,(unsigned short*)"",(unsigned short*)"",0);

//打开上述ADO数据集,但它的连接参数是使用的上述字符串

//应当存在以上面的连接替换该字符串的方法,但我没找到

prs->Open(COleVariant(_T("资料信息")),COleVariant(s),adOpenKeyset,adLockOptimistic,adCmdTable);

//数据集的域不存在打开与否,只需直接到已打开的数据集中引用即可,详情请见 //CBKDlg::OnBeforeColUpdateDatagrid方法

m_dg.ClearFields ();//MS DATAGRID 控件(Activex)的数据清空

m_dg.SetRefDataSource(prs); //上述控件与数据集的绑定

return TRUE;

}

BOOL CBKDlg::DestroyWindow()

{

// TODO: Add your specialized code here and/or call the base class

m_dg.SetRefDataSource(NULL);

long state;

//下面的处理可能存在逻辑上的错误,不过关闭数据集与数据连接的语法是正确的

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)

{

//该事件(方法)在MS DATAGRID 控件(ActiveX)的单元数据更新前发生

//该事件您可能用不着,但其中的代码您可能用得着

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控件的事件,无具体的处理代码,望海涵

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有