程式碼僅能查出 `石灰加入量/kg` 全表最大值,需求改為:使用者輸入區間範圍,查詢該區間內的最大值。
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);
_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);
}
}
確認 `石灰加入量/kg` 欄位型別為數值型(Double/Long),若為文字型需先轉換:
WHERE CDbl([石灰加入量/kg]) > ? AND CDbl([石灰加入量/kg]) < ?
在該欄位建立索引,區間查詢可大幅提升速度:
CREATE INDEX idx_lime ON employees ([石灰加入量/kg]);