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

VC++ ADO 查詢 Access 字段區間最大值 SQL 寫法

     編輯:程式設計綜合問答

原始問題

程式碼僅能查出 `石灰加入量/kg` 全表最大值,需求改為:使用者輸入區間範圍,查詢該區間內的最大值。

SQL 解決方案

CString strMin, strMax;
m_editMin.GetWindowText(strMin); // 使用者輸入下限
m_editMax.GetWindowText(strMax); // 使用者輸入上限

CString sql;
sql.Format(_T("SELECT TOP 1 * FROM employees ") \
           _T("WHERE [石灰加入量/kg] > %s AND [石灰加入量/kg] < %s ") \
           _T("ORDER BY [石灰加入量/kg] DESC"), strMin, strMax);

參數化查詢(防 SQL 注入)

_CommandPtr cmd = NULL;
cmd.CreateInstance(__uuidof(Command));
cmd->ActiveConnection = m_Ado.m_pConnection;
cmd->CommandText = "SELECT TOP 1 * FROM employees WHERE [石灰加入量/kg] > ? AND [石灰加入量/kg] < ? ORDER BY [石灰加入量/kg] DESC";
cmd->CommandType = adCmdText;

cmd->Parameters->Append(cmd->CreateParameter(_T("min"), adDouble, adParamInput, 0, _wtof(strMin)));
cmd->Parameters->Append(cmd->CreateParameter(_T("max"), adDouble, adParamInput, 0, _wtof(strMax)));

_RecordsetPtr rs = cmd->Execute(NULL, NULL, adCmdText);
if (!rs->adoEOF) {
    _variant_t var = rs->GetCollect(_T("石灰加入量/kg"));
    if (var.vt != VT_NULL) {
        m_t19 = (LPCTSTR)_bstr_t(var);
    }
}

欄位名稱最佳實踐

  • 避免中文、斜線 `/`、空格等特殊字元作為欄位名
  • 建議改為英文底線命名:`lime_addition_kg`
  • 若必須保留,SQL 中務必用 `[ ]` 包裹

資料型別注意

確認 `石灰加入量/kg` 欄位型別為數值型(Double/Long),若為文字型需先轉換:

WHERE CDbl([石灰加入量/kg]) > ? AND CDbl([石灰加入量/kg]) < ?

效能建議

在該欄位建立索引,區間查詢可大幅提升速度:

CREATE INDEX idx_lime ON employees ([石灰加入量/kg]);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved