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
参考文章
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.youkuaiyun.com/ballack_linux/article/details/52579126
3.【权威】https://blog.youkuaiyun.com/slshelly/article/details/7045598