好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

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 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.总结
数据库操作多种多样,可以查查相关资料
这里只介绍了简单的一种操作,面向对象封装一下,直接调用即可

查看更多关于VC下利用ADO访问Access数据库(UseADO)(转载)的详细内容...

  阅读:30次