VC下利用ADO直接访问Access数据库步骤不需要用户建立ODBC数据源) 1.包含相关动态链接库 //在StdAfx.h中,最后部分添加(注意:一定要在最后部分,否则会编译出错) #import c:/Program Files/Common Files/System/ado/msado15.dll no_namespace rename(EOF,adoEO
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
//CArray
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.总结
数据库操作多种多样,可以查查相关资料
这里只介绍了简单的一种操作,面向对象封装一下,直接调用即可