用ado连接access.docx
- 文档编号:4364290
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:21
- 大小:19.84KB
用ado连接access.docx
《用ado连接access.docx》由会员分享,可在线阅读,更多相关《用ado连接access.docx(21页珍藏版)》请在冰点文库上搜索。
用ado连接access
用ado连接access及相应的一些处理收藏
vc知识库
用ado对数据库access的连接
11)用控制面板中的管理工具添加.mdb的access数据库在系统DSN中添加DriverdoMicrosoftaccess
(*。
mdb)
1)-----------------------------------加入ADO支持库----------------------------
在StdAfx.h中
//加入ADO支持库
#import"c:
\programfiles\commonfiles\system\ado\msado15.dll"\
no_namespace\
rename("EOF","adoEOF")
2)--------------------------------初始化com,创建ado连接等操作-----------------------------
在CWinApp.h即
在classCAdoRWAccessApp:
publicCWinApp中
//定义ADO连接变量指针
_ConnectionPtrm_pConnection;
在CWinApp.h即
在BOOLCAdoRWAccessApp:
:
InitInstance()中
声明AfxOleInit();//初始化com,创建ado连接等操作
m_pConnection.CreateInstance(__uuidof(Connection));
3)--------------------打开本地Access库Demo.mdb--------------------------
在BOOLCAdoRWAccessApp:
:
InitInstance()中
try
{
//打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Demo.mdb",
"","",adModeUnknown);//注意代码的拼写错误!
!
!
}
catch(_com_errore)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!
");
returnFALSE;
}
4)-----------------------------------创建记录集对象---------------------------------------
在newadoDlg.h中
即classCAdoRWAccessDlg:
publicCDialog中声明
_RecordsetPtrm_pRecordset;//定义记录集变量指针
///初始化对话框
在newado.cpp中的OnInitDialog()函数中创建记录集对象
即BOOLCAdoRWAccessDlg:
:
OnInitDialog()中
加入m_pRecordset.CreateInstance(__uuidof(Recordset));//使用ADO创建数据库记录集
5)----------------------------------------打开表------------------------------------------
在newado.cpp中的OnInitDialog()函数中
即BOOLCAdoRWAccessDlg:
:
OnInitDialog()中
//在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
//因为它有时会经常出现一些想不到的错误
try
{
m_pRecordset->Open("SELECT*FROMDemoTable",//查询
DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(),//获取库接库的IDispatch指针
adOpenDynamic,
////注意声明全局变量CNewadoApptheApp为外部变量即externCNewadoApptheApp;因为app是一个全局
类对象。
所以要声明
adLockOptimistic,
adCmdText);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
6)---------------------------------------------名称:
OnReadAccess
//功能:
用ADO从Access文件中读取相应数据并显示出来------------------------------------------
---
voidCAdoRWAccessDlg:
:
OnReadAccess()
{
//先关闭已经打开的记录集对象
m_pRecordset->Close();///m_pRecordset就在这个的外部定义
try
{
m_pRecordset->Open("SELECT*FROMDemoTable",//查询
DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(),//获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
ListData();////注意要对这个类进行声明
////做法:
在CNewadoDlg右键点击addmenberfunction-》再定义类型为void的函
数
}
voidCAdoRWAccessDlg:
:
ListData()
{
_variant_tvar;
CStringstrName,strAge;
//效清空列表框
m_AccessList.ResetContent();//////注意m_AccessList需被定义声明
//先建立一个列表框Listaccess,-》改名-》声明一个列表框的成员变量
m_AccessList并注明是控件control
strName=strAge="";
//在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
//因为它有时会经常出现一些想不到的错误。
try
{
if(!
m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
return;
}
//读入库中各字段并加入列表框中
while(!
m_pRecordset->adoEOF)
{
var=m_pRecordset->GetCollect("Name");
if(var.vt!
=VT_NULL)
strName=(LPCSTR)_bstr_t(var);
var=m_pRecordset->GetCollect("Age");
if(var.vt!
=VT_NULL)
strAge=(LPCSTR)_bstr_t(var);
m_AccessList.AddString(strName+"-->"+strAge);
m_pRecordset->MoveNext();
}
//默认列表指向第一项,同时移动记录指针并显示
m_AccessList.SetCurSel(0);
OnSelchangeListaccess();///前一步已经对这个列表框命名现在要建立一个类向导;
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
7)-------------------------------------对列表框写编码———————————————————
———————
----------------------------------//名称:
OnSelchangeListaccess---------------
//功能:
当每次选择新的记录时,都会移动指针到新的记录位置并将值显示出来
/////////////////////////////////////////////////////////////////////////////
voidCAdoRWAccessDlg:
:
OnSelchangeListaccess()
{
intcurSel=m_AccessList.GetCurSel();
_variant_tvar,varIndex;
if(curSel<0)
return;
try
{
//先将指针移向第一条记录,然后就可以相对第一条记录来随意移动记录指针
m_pRecordset->MoveFirst();
m_pRecordset->Move(long(curSel));
var=m_pRecordset->GetCollect("Name");
if(var.vt!
=VT_NULL)
m_Name=(LPCSTR)_bstr_t(var);//////m_Name,m_Age等要做定义
////在对话框中新建几个按键先定义名称
并代表申明变量m_Name,m_Age
var=m_pRecordset->GetCollect("Age");
if(var.vt!
=VT_NULL)
m_Age=(LPCSTR)_bstr_t(var);
UpdateData(false);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、-----------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
--------------------------------------------------------------------
8)---------------------------------插入的字段值-------------------------------------
//////////////////////////////////////////////////////////////////////////////
//名称:
OnWriteAccess
//功能:
用ADO来写入插入的字段值
/////////////////////////////////////////////////////////////////////////////
////步骤:
1调用AddNew()新增一个空记录集
//////////2调用PutCollect(字段名,值)输入每个字段的值
//////////3调用Update()更新数据库中的数据
///////
voidCAdoRWAccessDlg:
:
OnWriteAccess()
{
UpdateData();
if(m_Name==""||m_Age=="")
{
AfxMessageBox("姓名和年龄信息不能为空!
");
return;
}
//检验年龄是否正确
longage;
age=atol(m_Age);
if(age<0||age>150)
{
AfxMessageBox("“年龄”错误,请重新输入“年龄”!
");
m_Age="";
UpdateData(false);
GetDlgItem(IDC_AGE)->SetFocus();
return;//////这里出错!
!
怎么改?
?
//////////////////////////////定义主键是数字不能相同,所以要排除
}
//在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
//因为它有时会经常出现一些想不到的错误。
try
{
//写入各字段值
m_pRecordset->AddNew();
m_pRecordset->PutCollect("Name",_variant_t(m_Name));
m_pRecordset->PutCollect("Age",atol(m_Age));
m_pRecordset->Update();
AfxMessageBox("插入成功!
");
//更新显示其库内容
intnCurSel=m_AccessList.GetCurSel();
ListData();///显示出来
m_AccessList.SetCurSel(nCurSel);
//移动记录指针到新的位置
OnSelchangeListaccess();
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
9)---------------------------------修改并更新当前记录值-------------------------------
----------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////////////
//名称:
OnModify
//功能:
修改并更新当前记录值
/////////////////////////////////////////////////////////////////////////////
//////1调用PutCollext(字段名,值)给当前记录行的每个字段赋新值
//////2调用UPdate()更新数据库中的数据
//////////////////////////////////////////////
voidCAdoRWAccessDlg:
:
OnModify()
{
UpdateData();//更新对话框数据
if(m_AccessList.GetCount()==0||m_Name==""||m_Age=="")
{
AfxMessageBox("表中记录数为空或姓名和年龄信息没有设置!
");
return;
}
elseif(m_AccessList.GetCurSel()<0||m_AccessList.GetCurSel()>
m_AccessList.GetCount())
m_AccessList.SetCurSel(0);
//判断年龄是否正确
longage;
age=atol(m_Age);
if(age<0||age>150)
{
AfxMessageBox("“年龄”错误,请重新输入“年龄”!
");
m_Age="";
UpdateData(false);
GetDlgItem(IDC_AGE)->SetFocus();
return;
}
//修改当前记录的字段值
try
{
m_pRecordset->PutCollect("Name",_variant_t(m_Name));
m_pRecordset->PutCollect("Age",atol(m_Age));
m_pRecordset->Update();
//重新读入库记录更新显示
intnCurSel=m_AccessList.GetCurSel();
ListData();
m_AccessList.SetCurSel(nCurSel);
//移动记录指针到新的位置
OnSelchangeListaccess();
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
10)/////////////////////////////删除并更新当前记录///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//名称:
OnDelete
//功能:
删除并更新当前记录
/////////////////////////////////////////////////////////////////////////////
voidCAdoRWAccessDlg:
:
OnDelete()
{
if(m_AccessList.GetCount()==0)
return;
elseif(m_AccessList.GetCurSel()<0||m_AccessList.GetCurSel()>
m_AccessList.GetCount())
m_AccessList.SetCurSel(0);
try
{
//删除当前行记录
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->Update();
//删除列表中当前值
intnCurSel=m_AccessList.GetCurSel();
m_AccessList.DeleteString(nCurSel);
if(nCurSel==0&&(m_AccessList.GetCount()!
=0))
m_AccessList.SetCurSel(nCurSel);
elseif(m_AccessList.GetCount()!
=0)
m_AccessList.SetCurSel(nCurSel-1);
//移动记录指针到新的位置
OnSelchangeListaccess();
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
}
////////////////////////////////////////////////////////
///////////////////////////////////////////////
11)-------------------
-//////////////////////////////////////////////////////////////////////////////
//名称:
OnQuery
//功能:
查询记录
/////////////////////////////////////////////////////////////////////////////
voidCAdoRWAccessDlg:
:
OnQuery()
{
UpdateData(TRUE);
//构造Sql语句
CStringstrSql;
if(m_Name!
=""&&m_Age!
="")
strSql.Format("SELECT*FROMDemoTableWHEREName='%s'ANDAge='%s'",
m_Name,m_Age);
elseif(m_Name!
=""&&m_Age=="")
strSql.Format("SELECT*FROMDemoTableWHEREName='%s'",m_Name);
elseif(m_Name==""&&m_Age!
="")
strSql.Format("SELECT*FROMDemoTableWHEREAge='%s'",m_Age);
else
strSql="SELECT*FROMDemoTable";
try
{
//先关闭已经打开的记录集对象
m_pRecordset->Close();
//根据新的Sql查询语句,重新打开记录集对象
m_pRecordset->Open(strSql.AllocSysString(),
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
}
//将查询后得到的新记录集显示出来
ListData();
}
12)关闭记录集和连接
BOOLCDemoadoDlg:
:
DestroyWindow()
{
m_pRecordset->Close();
m_pRecordset=NULL;
returnCDialog:
:
DestroyWindow();
}
BOOLCDemoadoDlg:
:
DestroyWindow()
{
//
m_pRecordset->Close();
m_pRecordset=NULL;
returnCDialog:
:
DestroyWindow();
}
////////////////////////////////////////////////////////////////////////////////////////////
//////
----------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ado 连接 access