MSDN给出了各种语言访问Access 2010的详细介绍:点击打开链接。下图列出了各种语言访问Access 2010的接口。
我在VS2008下使用MFC下的ODBC相关接口访问Access 2010数据库。
Demo中使用MFC访问数据库accsess2010数据库AccessDemo.accdb下有student表,表中有用户编号、电话号码、姓名、省份四列信息,表中有包含这四列信息的多个记录。
MFC下使用CDatabase、CRecordset、CDBException三个类来访问数据库。其中CDatabase主要用来打开和关闭数据库以及执行SQL指令;CRecordset用来执行查询、删除、添加记录;CDBException用来处理异常信息。
1.使用CDatabase、CRecordset、CDBException需要包含头文件:
#include "afxwin.h"
2.打开数据库
CDatabase db;
BOOL result = TRUE;
LPCTSTR lpszConnect =
_T("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:\\AccessDemo.accdb;PWD=asdfg;");
TRY
{
result = db.OpenEx(lpszConnect, CDatabase::openExclusive|CDatabase::noOdbcDialog);
}
catch(CDBException * e){
MessageBox(e->m_strError);
}
3.关闭数据库
TRY
{
db.Close();
}
catch(CDBException * e){
MessageBox(e->m_strError);
}
4.插入一个新的记录,这里使用CDatabase.ExecuteSQL()来执行SQL语句插入记录到表中。
UpdateData(TRUE);
CString insert,temp;
insert=_T("insert into student(用户编号,电话号码,姓名,省份) values(");
temp.Format(_T("%d"),m_idlint);
insert+=temp+_T(",\'")+m_phonenumstr+_T("\',\'")+m_namestr+_T("\',\'")+m_provincestr+_T("\')");
try{
db.ExecuteSQL(insert);
}
catch(CDBException *e){
MessageBox(e->m_strError);
}
5.使用CRecordset查询记录符合条件的记录。
UpdateData(TRUE);
BOOL result = TRUE;
CDBVariant var;
CString value;
CString query =_T("SELECT student.[用户编号], student.[电话号码],student.[姓名], student.[省份] FROM student where student.[电话号码]='");
query+=m_phonenumstr+_T("'");
MessageBox(query);
CRecordset rs(&db);
try{
result = rs.Open(CRecordset::dynaset, query, CRecordset::none);
if(TRUE==result){
CODBCFieldInfo fInfo;
short sFieldCount = rs.GetODBCFieldCount();
int rowCount = 0;
while (!rs.IsEOF())
{
for (short column = 0; column < sFieldCount; column++)
{
rs.GetFieldValue(column, var);
switch (var.m_dwType)
{
case DBVT_STRING:
value.Format(_T("%s"), var.m_pstring->GetBuffer(var.m_pstring->GetLength()));
break;
case DBVT_ASTRING:
value.Format(_T("%s"), var.m_pstringA->GetBuffer(var.m_pstringA->GetLength()));
break;
case DBVT_WSTRING: