发布时间 : 星期一 文章用ado连接access更新完毕开始阅读d1e0d2eb19e8b8f67c1cb962
用ado连接access 及相应的一些处理 收藏 vc知识库
用ado对数据库access的连接
11)用控制面板中的管理工具 添加.mdb的access数据库 在系统DSN中添加Driver do Microsoft access
(*。mdb)
1)-----------------------------------加入ADO支持库---------------------------- 在StdAfx.h中 //加入ADO支持库
#import \ no_namespace \\
rename (\
2)--------------------------------初始化com,创建ado连接等操作----------------------------- 在CWinApp.h即
在class CAdoRWAccessApp : public CWinApp中 // 定义ADO连接变量指针
_ConnectionPtr m_pConnection;
在CWinApp.h即
在BOOL CAdoRWAccessApp::InitInstance()中 声明AfxOleInit(); //初始化com,创建ado连接等操作 m_pConnection.CreateInstance(__uuidof(Connection));
3)--------------------打开本地Access库Demo.mdb--------------------------
在BOOL CAdoRWAccessApp::InitInstance()中 try {
//打开本地Access库Demo.mdb
m_pConnection->Open(\ \注意代码的拼写错误!!! }
catch(_com_error e) {
AfxMessageBox(\数据库连接失败,确认数据库Demo.mdb是否在当前路径下!\ return FALSE;
}
4)-----------------------------------创建记录集对象---------------------------------------
在newadoDlg.h中
即class CAdoRWAccessDlg : public CDialog中声明
_RecordsetPtr m_pRecordset;// 定义记录集变量指针
///初始化对话框
在newado.cpp中的OnInitDialog()函数中创建记录集对象 即BOOL CAdoRWAccessDlg::OnInitDialog()中
加入 m_pRecordset.CreateInstance(__uuidof(Recordset));//使用ADO创建数据库记录集
5)----------------------------------------打开表------------------------------------------
在newado.cpp中的OnInitDialog()函数中 即BOOL CAdoRWAccessDlg::OnInitDialog()中
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误 try {
m_pRecordset->Open(\ // 查询
DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针 adOpenDynamic,
////注意声明全局变量CNewadoApp theApp为外部变量即extern CNewadoApp theApp;因为app是一个全局
类对象。所以要声明
adLockOptimistic, adCmdText); }
catch(_com_error *e) {
AfxMessageBox(e->ErrorMessage()); }
6)---------------------------------------------名称:OnReadAccess
//功能:用ADO从Access文件中读取相应数据并显示出来------------------------------------------ ---
void CAdoRWAccessDlg::OnReadAccess() {
//先关闭已经打开的记录集对象
m_pRecordset->Close();///m_pRecordset就在这个的外部定义 try {
m_pRecordset->Open(\ // 查询
DemoTable表中所有字段
theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针 adOpenDynamic, adLockOptimistic, adCmdText); }
catch(_com_error *e) {
AfxMessageBox(e->ErrorMessage()); }
ListData();////注意要对这个类进行声明
////做法:在CNewadoDlg右键点击 add menber function-》再定义类型为void的函 数
}
void CAdoRWAccessDlg::ListData() {
_variant_t var;
CString strName,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(\ if(var.vt != VT_NULL)
strName = (LPCSTR)_bstr_t(var); var = m_pRecordset->GetCollect(\ if(var.vt != VT_NULL)
strAge = (LPCSTR)_bstr_t(var);
m_AccessList.AddString( strName + \
m_pRecordset->MoveNext();
}
// 默认列表指向第一项,同时移动记录指针并显示 m_AccessList.SetCurSel(0);
OnSelchangeListaccess();///前一步已经对这个列表框命名 现在要建立一个类向导; }
catch(_com_error *e) {
AfxMessageBox(e->ErrorMessage()); } } 7)-------------------------------------对列表框写编码———————————————————
———————
----------------------------------//名称:OnSelchangeListaccess---------------
//功能:当每次选择新的记录时,都会移动指针到新的记录位置并将值显示出来 ///////////////////////////////////////////////////////////////////////////// void CAdoRWAccessDlg::OnSelchangeListaccess() {
int curSel = m_AccessList.GetCurSel(); _variant_t var,varIndex;
if(curSel < 0) return;
try {
// 先将指针移向第一条记录,然后就可以相对第一条记录来随意移动记录指针 m_pRecordset->MoveFirst();
m_pRecordset->Move(long(curSel));