MFC下访问access数据库的几种方式

ODCB的方式:

#include <AFXDB.H>
void CMy032901Dlg::OnButton5()
{
CDatabase m_db;
CRecordset rs(&m_db);


CString strFile = GetCurrentPath()+"\\testdb.mdb";
CFileFind  fFind;
BOOL bSuccess =fFind.FindFile(strFile);
fFind.Close();
if(!bSuccess)
{
AfxMessageBox("mdb文件不存在!");
return;
}


TRY
{
COleVariant var; // 字段类型
var.ChangeType(VT_BSTR, NULL);
CString co1,co2,co3;


CString strConnect;
strConnect.Format(_T("ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};UID=sa;PWD=;DBQ=%s"), strFile);

if(m_db.Open(NULL, FALSE, FALSE, strConnect))
{
//连接数据库成功

CString strSql;
strSql = _T("select * from SCOTT_SALGRADE");
rs.Open(CRecordset::forwardOnly,strSql,CRecordset::readOnly);
while(!rs.IsEOF())
{
rs.GetFieldValue("GRADE",co1);
rs.GetFieldValue("LOSAL",co2);
rs.GetFieldValue("HISAL",co3);
m_AccessList.AddString(co1+ " --> "+co2+"-->"+co3);
rs.MoveNext();
}
m_db.Close();
}
}
CATCH(CDBException,e)
{
AfxMessageBox("Database Error:" + e->m_strError);
}
END_CATCH;
}
ODBC;DRIVER={MICROSOFT ACCESS DRIVER (*.mdb)};UID=SA;PWD=BCS7.2_SDBS;DBQ=C:\Users\hucon\Dev\Gitee\数据库备份\安九一号站\二号机\BCS7-B12-DB\BCS7.2.mdb

参考文章

1.连接access的三种方式

OLEDB的连接方式

首先, 在VS2010中建立一个MFC新项目, 然后在其stdafx.h中加入如下语句:

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

然后在cpp添加OLE初始化:

if(!AfxOleInit()) {
AfxMessageBox(_T("Initializes OLE support for the application fail!"));
}

接着打开数据库文件并替换重复记录:

_RecordsetPtr m_pRecordset;//记录集对象智能指针,它对记录集提供了控制功能

_ConnectionPtr m_pConnection;//连接对象智能指针,通常用于创建一个数据库连接或执行一条不返回任何结果的SQL语句

_bstr_t strcnn(_T("Provider=Microsoft.JET.OLEDB.4.0;Data source=contact.mdb"));
try
{
m_pConnection.CreateInstance(__uuidof(Connection));//创建连接对象实例
m_pConnection->Open(strcnn,  _T(""), _T(""), adModeUnknown);//打开数据库
m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集对象实例
}
catch(_com_error e)//获取异常信息
{
AfxMessageBox(e.ErrorMessage());
return FALSE;
}

try
{
if((m_pRecordset->adoEOF))//如果没有重复数据直接添加新数据
{
            m_pRecordset->AddNew();
    var=_variant_t(long(0));
            m_pRecordset->PutCollect(&var,(_variant_t)code );
            var=_variant_t(long(1));
            m_pRecordset->PutCollect(&var,(_variant_t)data );
            var=_variant_t(long(2));
            m_pRecordset->PutCollect(&var,(_variant_t)strTime );
            m_pRecordset->Update();
}
else
{
  m_pRecordset->MoveFirst();
  var=_variant_t(long(1));
          m_pRecordset->PutCollect(&var,(_variant_t)data );
          var=_variant_t(long(2));
          m_pRecordset->PutCollect(&var,(_variant_t)strTime );
          m_pRecordset->Update();
}
}
catch(_com_error *e)
{
  AfxMessageBox(e->Description());
  return;
}
       m_pRecordset->Close();
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=**.mdb;Mode=Read;Persist Security Info=False;Jet OLEDB:Database Password='BCS7.2_SDBS'
   
//Mode=Read;Persist Security Info=False;    能够以只读方式打开,去掉这段就是以独占方式打开

//Open方法的原型:
   //Open(_bstr_t ConnectionString,_bstr_t UserID,_bstr_t Password,long Options)
   //ConnectionString为连接字串,UserID是用户名,Password是登陆密码
   //Options是连接选项,可以是如下几个常量:
   //adModeUnknown 缺省,当前的许可权未设置
   //adModeRead 只读
   //adModeWrite 只写
   //adModeReadWrite 可以读写
   //adModeShareDenyRead 阻止其它Connection对象以读权限打开连接
   //adModeShareDenyWrite 阻止其它Connection对象以写权限打开连接
   //adModeShareExclusive 阻止其它Connection对象打开连接
   //adModeShareDenyNone 阻止其它程序或对象以任何权限建立连接

参考文章

1.https://www.cnblogs.com/ZHENGJUNupperclassman/p/8336396.html

2.https://blog.csdn.net/ballack_linux/article/details/52579126

3.【权威】https://blog.csdn.net/slshelly/article/details/7045598

猜你喜欢

转载自blog.csdn.net/Robin_hc/article/details/82789996