首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VC++ 連接 Access 資料庫查詢欄位最大值與最小值完整範例

     編輯:程式設計綜合問答

需求場景

在 VC++ (MFC/ATL) 專案中,需要透過 ADO 或 ODBC 連接 Microsoft Access 資料庫,查詢指定欄位的最大值與最小值,並將結果顯示於對話方塊的編輯框中。適合初學 C++ 資料庫程式設計的開發者參考。

核心技術點

  • 使用 _ConnectionPtr、_RecordsetPtr 等 ADO 智慧指標。
  • SQL 聚合函數 MAX()、MIN()。
  • 變異型 (_variant_t) 與 C++ 型別轉換。
  • 錯誤處理與資源釋放。

完整程式碼範例 (MFC 對話方塊專案)

1. 標頭檔包含與命名空間

#include 
#import "msado15.dll" no_namespace rename("EOF", "adoEOF")
#include 

2. 查詢函數實作

void CMyDialog::QueryMinMax(CString strTable, CString strField, CEdit& editMin, CEdit& editMax)
{
    try {
        _ConnectionPtr pConn(__uuidof(Connection));
        _RecordsetPtr pRs(__uuidof(Recordset));

        // 連接字串:Access 2007+ 使用 ACE.OLEDB.12.0
        CString strConn = _T("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Data\\MyDB.accdb;Persist Security Info=False;");
        pConn->Open(_bstr_t(strConn), _T(""), _T(""), adConnectUnspecified);

        // SQL 查詢
        CString strSQL;
        strSQL.Format(_T("SELECT MIN([%s]) AS MinVal, MAX([%s]) AS MaxVal FROM [%s]"), strField, strField, strTable);

        pRs->Open(_bstr_t(strSQL), pConn.GetInterfacePtr(), adOpenStatic, adLockReadOnly, adCmdText);

        if (!pRs->adoEOF) {
            _variant_t varMin = pRs->GetCollect(_T("MinVal"));
            _variant_t varMax = pRs->GetCollect(_T("MaxVal"));

            CString strMin, strMax;
            if (varMin.vt != VT_NULL) strMin.Format(_T("%s"), (_bstr_t)varMin);
            if (varMax.vt != VT_NULL) strMax.Format(_T("%s"), (_bstr_t)varMax);

            editMin.SetWindowText(strMin);
            editMax.SetWindowText(strMax);
        }

        pRs->Close();
        pConn->Close();
    }
    catch (_com_error& e) {
        AfxMessageBox(_T("資料庫錯誤: ") + CString(e.ErrorMessage()));
    }
}

3. 按鈕點擊事件呼叫

void CMyDialog::OnBnClickedBtnQuery()
{
    QueryMinMax(_T("Products"), _T("Price"), m_editMin, m_editMax);
}

常見問題與解決

問題原因解決
連接失敗未安裝 Access Database Engine下載安裝 Microsoft Access Database Engine 2016 Redistributable (x64/x86 需與專案位元數一致)
欄位名稱有空格SQL 語法錯誤欄位名用方括號括起來,如 [Unit Price]
結果為空資料表無資料或欄位全 NULL程式碼已判斷 VT_NULL,顯示空字串

進階擴充

  • 改用參數化查詢防止 SQL 注入(雖 Access 支援有限)。
  • 封裝成 CDBAccess 類別,支援連線池與交易。
  • 搭配 CListCtrl 顯示多欄位統計結果。

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved