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

VC++ ADO 查詢 Access 指定範圍內欄位最大最小值

     編輯:程式設計綜合問答

問題描述

使用 VC++ 搭配 ADO 連接 Access 資料庫,需根據使用者輸入的範圍(如編輯框輸入起始與結束值),查詢 石灰加入量/kg 欄位在該範圍內的最大值與最小值。原程式碼僅能查詢全表最大值。

解決方案:SQL WHERE 條件配合參數化查詢

將使用者輸入的範圍值作為 SQL WHERE 條件,直接在資料庫層面過濾資料,再取得極值,避免將大量資料拉到應用層排序。

改良後的 SQL 查詢

// 取得最大值
CString sqlMax = _T("SELECT MAX([石灰加入量/kg]) FROM employees WHERE [石灰加入量/kg] >= ? AND [石灰加入量/kg] <= ?");

// 取得最小值
CString sqlMin = _T("SELECT MIN([石灰加入量/kg]) FROM employees WHERE [石灰加入量/kg] >= ? AND [石灰加入量/kg] <= ?");

參數化執行範例 (ADO)

_CommandPtr pCmd = NULL;
pCmd.CreateInstance(__uuidof(Command));
pCmd->ActiveConnection = m_Ado.m_pConnection;
pCmd->CommandText = sqlMax.bstrVal;
pCmd->CommandType = adCmdText;

// 附加參數
pCmd->Parameters->Append(pCmd->CreateParameter(_T("@min"), adDouble, adParamInput, 0, minVal));
pCmd->Parameters->Append(pCmd->CreateParameter(_T("@max"), adDouble, adParamInput, 0, maxVal));

_RecordsetPtr pRs = pCmd->Execute(NULL, NULL, adCmdText);
if (!pRs->adoEOF) {
    _variant_t var = pRs->GetCollect(0);
    if (var.vt != VT_NULL) {
        double maxValue = var.dblVal;
        // 顯示到編輯框...
    }
}

關鍵點

  • 欄位名含特殊字元:Access 欄位名包含 /、中文等,必須用方括號 [] 包裹。
  • 參數化查詢:防止 SQL 注入,且自動處理資料型別轉換。
  • 聚合函數:直接使用 MAX()、MIN() 讓資料庫引擎計算,效能遠優於應用層排序。
  • 資料型別:確認欄位為數值型(Double/Long),否則需先轉型 CDBL() 或 VAL()。

替代方案:DAO 或 SQL 直通

若專案允許,可考慮使用 DAO 物件模型或透過 CurrentProject.Connection.Execute 執行直通 SQL,語法更簡潔。

採用參數化聚合查詢,可高效、安全地解決範圍極值查詢需求。

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