7个变量:Po、Ps、Pc、Qo、Qs、Qc、Sr,1-3为输入变量,4-7为输出变量。数据如下:
Po Ps Pc Qo Qs Qc Sr
(m) (m) (m) (m^3/h)(m^3/h)(m^3/h)
80.8 11.4 39.6 42.6 16.5 59.0 .494
80.6 11.5 48.7 42.8 .6 43.5 .494
80.3 11.3 45.4 42.6 4.5 46.7 .494
80.3 10.9 42.9 42.7 7.8 50.0 .494
...........
82.5 11.4 39.8 41.8 16.9 58.9 .468
82.5 11.4 39.8 41.8 16.9 58.9 .468
82.7 11.0 48.5 42.1 .8 43.0 .468
...............
假设现有实际TSr=0.48,找出要找出的最小值对应的Sr,并在找到的结果集中找到符合条件min[(Po-实际Po)+(Ps-实际Ps)+(Pc-实际Pc)+(Qc-实际Qc)]的那一条记录,并把得到的那一行7个变量值赋予程序中的变量。
m_pRecordset->Open("SELECT * FROM TestDataTable", theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic, adCmdText);
中的"SELECT * FROM TestDataTable"该如何写?如何把值返回给变量?
SELECT * FROM TestDataTable
WHERE Po + Ps + Pc + Qc =
(
SELECT MIN(Po + Ps + Pc + Qc) FROM TestDataTable
WHERE Sr = (SELECT MAX(Sr) FROM FROM TestDataTable)
)
我建议还是用老办法,把数据集返回到一个矩阵里面,再进行min的操作
_variant_t var;
//CString Po,Ps,Pc,Qo,Qs,Qc,Sr,eta;
Mm mFindResult;
mFindResult=zeros(17,7);
// 清空列表框
//m_listSr.ResetContent();
//Po=Ps=Pc=Qo=Qs=Qc=Sr=eta="";
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些想不到的错误。jingzhou xu
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
{
AfxMessageBox("表内数据为空");
//return;
}
// 读入库中各字段并加入列表框中
int i=1;
while(!m_pRecordset->adoEOF)
{
var = m_pRecordset->GetCollect("Po");
if(var.vt != VT_NULL)
{
var.ChangeType(VT_BSTR);
mFindResult.r(i,1) = var.dblVal;
}
var = m_pRecordset->GetCollect("Ps");
if(var.vt != VT_NULL)
{
var.ChangeType(VT_BSTR);
mFindResult.r(i,2) = var.dblVal;
}
var = m_pRecordset->GetCollect("Pc");
if(var.vt != VT_NULL)
{
var.ChangeType(VT_BSTR);
mFindResult.r(i,3) = var.dblVal;
}
var = m_pRecordset->GetCollect("Qo");
if(var.vt != VT_NULL)
{
var.ChangeType(VT_BSTR);
mFindResult.r(i,4) = var.dblVal;
}
var = m_pRecordset->GetCollect("Qs");
if(var.vt != VT_NULL)
{
var.ChangeType(VT_BSTR);
mFindResult.r(i,5) = var.dblVal;
}
var = m_pRecordset->GetCollect("Qc");
if(var.vt != VT_NULL)
{
var.ChangeType(VT_BSTR);
mFindResult.r(i,6) = var.dblVal;
}
var = m_pRecordset->GetCollect("Sr");
if(var.vt != VT_NULL)
{
var.ChangeType(VT_BSTR);
mFindResult.r(i,7) = var.dblVal;
}
//m_listSr.AddString(Po+" "+Ps+" "+Pc+" "+Qo+" "+Qs+" "+Qc+" "+Sr);
i=i+1;
m_pRecordset->MoveNext();