您的位置:首页 > 数据库

VC下利用ADO访问Access数据库(Use ADO)(转载)

2008-01-05 20:14 411 查看
(From http://www.j2megame.org/wupei/blog.php/myblog/vc/2007/07/21/vc-ado-access)

VC下利用ADO直接访问Access数据库步骤不需要用户建立ODBC数据源)

1.包含相关动态链接库



//在StdAfx.h中,最后部分添加(注意:一定要在最后部分,否则会编译出错)



#import "c:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","adoEOF")



2.连接的创建与初始化



//相关成员变量



_ConnectionPtr m_conn;



_RecordsetPtr m_res;







//成员函数块(一般写在CDocment类构造函数即可)



try



{



CoInitialize(NULL);



m_conn.CreateInstance(_uuidof(Connection));



CString strFileName;



strFileName = "MYBASE.mdb"; //添加相应你的数据库的文件名,编辑状态应放在源文件目录下



m_conn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strFileName,



"","",adConnectUnspecified); //用户名,密码



m_res.CreateInstance(_uuidof(Recordset));



}



catch(_com_error e) //异常检测



{



AfxMessageBox("数据库连接错误!",MB_ICONEXCLAMATION);



exit(0); //错误,程序退出



}



3.数据库相关操作(操作方法很多,这里只提供一种简易操作)
假设数据库表设计如下:
表名: MYTABLE
表设计:
自动编号类型 ID
字符串类型 NAME
BOOL类型 SEX

(1)增



_variant_t m_resa; //可声明为成员变量







CString strMyName = "MyName";



CString strSex = "true";







CString sql;



sql = "insert into MYTABLE (NAME,SEX) ";



sql += "values ('" + strMyName +"',";



sql += " " + strSex + " ";



sql += ")";







try



{



m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作



}



catch(_com_error e)



{



AfxMessageBox("数据库增错误",MB_ICONEXCLAMATION);



exit(0); //错误,程序退出



}



(2)删



_variant_t m_resa; //可声明为成员变量







CString strID = "1"; //所要删除记录的ID号



CString sql;







sql = "delete from MYTABLE "; //注意需要有空格



sql += "where ID = " + strID; //其他语法详查SQL语句







try



{



m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作



}



catch(_com_error e)



{



AfxMessageBox("数据库删错误",MB_ICONEXCLAMATION);



exit(0); //错误,程序退出



}



(3)改



_variant_t m_resa; //可声明为成员变量







CString sql;



CString strMyName = "MyName";



CString strSex = "true";



CString strID = "1"; //所要更新的记录ID







sql = "update MYTABLE set ";



sql += "NAME = '" + strMyName +"', ";



sql += "SEX = " + strSex + " ";



sql += "where id = " + strID;







try



{



m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText); //执行"增"操作



}



catch(_com_error e)



{



AfxMessageBox("数据库删错误",MB_ICONEXCLAMATION);



exit(0); //错误,程序退出



}



(4)查



_variant_t m_resa; //可声明为成员变量



CString sql;



sql = "Select * from MYTABLE"; //查询语句改变,相应下面的语句也要改变







//#include <afxtempl.h> //需加入头文件



//CArray<CMyClass,CMyClass&> m_Array; //可用容器保存你取得的数据







try



{



m_res = m_conn->Execute((_bstr_t)sql,&m_resa,adCmdText);



}



catch(_com_error e)



{



AfxMessageBox("数据库查错误",MB_ICONEXCLAMATION);



exit(0);



}







//m_Array.RemoveAll(); //清空容器







try



{



while(!m_res->adoEOF) //循环遍历记录



{



_variant_t vID, vName, vSex;







vID = m_res->GetCollect("ID");



vName = m_res->GetCollect("NAME");



vSex = m_res->GetCollect("SEX");







///////////////////////////////////////////////



int nID;



nID = (long)vID.lVal;



///////////////////////////////////////////////



CString strName;



if(VT_NULL != vName.vt ) //如果数据不为空



{



strName = (LPCTSTR)vName.bstrVal;



}



///////////////////////////////////////////////



bool bSex;



if(VT_NULL != vSex.vt )



{



bSex = (bool)vSex.boolVal;



}



////////////////////////////////////////////////







//CMyClass one(nID, strName, bSex); //创建数据对象



//m_Array.Add(one); //加入数组







m_res->MoveNext(); //移动到下一条记录



}



}



catch(_com_error e)



{



AfxMessageBox("数据库查错误",MB_ICONEXCLAMATION);



exit(0);



}



4.关闭数据库



try



{



if(m_res != NULL)



{



m_res->Close(); //关闭记录集



}



if(m_conn != NULL)



{



m_conn->Close(); //关闭连接



}



}



catch(_com_error e)



{



AfxMessageBox("数据库关闭错误",MB_ICONEXCLAMATION);



exit(0);



}



5.总结
数据库操作多种多样,可以查查相关资料
这里只介绍了简单的一种操作,面向对象封装一下,直接调用即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: