天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 31|回复: 0

C++ 读取MDB数据库

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-9-26 10:25:42 | 显示全部楼层 |阅读模式
    1. /// <summary>
    2. /// 读取MDB
    3. /// </summary>
    4. /// <param name="mdbMpPath">MDB路径</param>
    5. /// <param name="strSql">sql语句</param>
    6. /// <param name="zddz"></param>
    7. void CMyPalette1ChildDlg::ReadMDB(const CString& mdbMpPath, const CString& strSql, std::map<CString, CString>& zddz)
    8. {
    9.         if (!AfxOleInit())//这就是初始化COM库
    10.         {
    11.                 AfxMessageBox(L"OLE初始化出错!");
    12.                 return;
    13.         }
    14.         _ConnectionPtr m_pConnection;

    15.         _RecordsetPtr m_pRecordset;

    16.         //_CommandPtr m_pCommand;

    17.         CString strSQL; //配置初始连接串
    18.         strSQL = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=";
    19.         strSQL += mdbMpPath;
    20.         strSQL += ";";
    21.         HRESULT hr;
    22.         try
    23.         {
    24.                 hr = m_pConnection.CreateInstance("ADODB.Connection");///创建Connection对象
    25.                 if (SUCCEEDED(hr))
    26.                 {
    27.                         hr = m_pConnection->Open((_bstr_t)strSQL, "", "", adModeUnknown);///连接数据库
    28.                         ///上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; }
    29.                         m_pRecordset.CreateInstance("ADODB.Recordset");
    30.                         try
    31.                         {
    32.                                 //打开数据库
    33.                                 m_pRecordset->Open((_bstr_t)strSql,
    34.                                         m_pConnection.GetInterfacePtr(),//或使用_variant_t((IDispatch*)theApp.m_pConnection,true),,但需要extern声明theApp;
    35.                                         adOpenDynamic,
    36.                                         adLockOptimistic,
    37.                                         adCmdText);
    38.                                 //遍历读取

    39.                                 while (!m_pRecordset->adoEOF)//adoEOF判断数据库指针是否已经到结果集末尾;BOF判断是否在第一条记录前面
    40.                                 {
    41.                                         auto key = m_pRecordset->GetCollect("类型");
    42.                                         //这里已经读到当前记录的ID,需要进行非空等判断,非空之后就可以处理,比如添加到列表框等。
    43.                                         auto value = m_pRecordset->GetCollect("值");
    44.                                         zddz[key] = value;
    45.                                         //....
    46.                                         m_pRecordset->MoveNext();
    47.                                 }

    48.                                 m_pRecordset->Close();//关闭记录集
    49.                                 //m_pRecordset->Release();
    50.                         }
    51.                         catch (_com_error error)
    52.                         {
    53.                                 if (m_pRecordset->State) {
    54.                                         m_pRecordset->Close();//关闭记录集
    55.                                         //m_pRecordset->Release();
    56.                                 }
    57.                                 CString errorMessage;
    58.                                 errorMessage.Format(L"%s", (LPTSTR)error.Description());
    59.                                 AfxMessageBox(errorMessage);
    60.                                 return;
    61.                         }
    62.                         if (m_pConnection->State)//如果连接有效
    63.                         {
    64.                                 m_pConnection->Close();
    65.                                 //m_pConnection->Release();
    66.                         }
    67.                 }
    68.         }
    69.         catch (_com_error e)///捕捉异常
    70.         {
    71.                 if (m_pRecordset->State) {
    72.                         m_pRecordset->Close();//关闭记录集
    73.                         //m_pRecordset->Release();
    74.                 }
    75.                 if (m_pConnection->State)//如果连接有效
    76.                 {
    77.                         m_pConnection->Close();
    78.                         //m_pConnection->Release();
    79.                 }
    80.                 CString errormessage;
    81.                 errormessage.Format(L"连接数据库失败!\r\n错误:%s!", e.ErrorMessage());
    82.                 AfxMessageBox(errormessage);///显示错误信息
    83.         }
    84. }
    复制代码

     

     

     

     

    C++ 读取MDB数据库
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 10:32 , Processed in 0.108856 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表