获得oracle数据表中日期时间类型记录:有两条记录:第一个:开始计算时读取的日期字段;第二个从开始计算起,不断求某一值,当这个值满足条件后,读取这个日期时间记录,作为这个记录的值。 在第二条记录读数之前,第一条记录的日期时间值保持不变,读完第二条后,把第一条记录移动到下一条,该值作为第一个记录的新值,之后开始计算,直到重新满足上述条件,读取第二个记录,并把第一个记录的值移动到下一条,……依次类推,完成整个计算。请教第一个记录怎么控制读取?
调试欢乐多
用VC应该容易实现,设置一个基准指针pbase,再设一个当前指针pnow,根据你的需要更换它们和其中的值。
在得到值后再select into就可以了.
具体计算的实现看你需求决定
是在VC++中编辑的,我已经设定了两个 COleDateTime 变量,用来存储这两个变量,最后通过ADO连接添加到新的oracle数据表中,就是这个不断控制循环不知道怎么写。
下面是我大致写的:ADO等读书连接没问题,循环条件如下:
先记录下开始时间,作为timeD1,然后保持不变;当SUM>=SETVALUE时,记录下当前时刻,作为timeD2,进行计算:ts=timeD2-timeD1;之后把开始时间timeD1移动到下一条记录(上一条记录不要了),做为新的开始时间,重新开始计算,直到满足条件SUM>=SETVALUE,记录新的时间作为timeD2,这样一直计算。
COleDateTime timeD1,timeD2;
_variant_t varD,varD1,vCount1;
double SETVALUE=200;
COleDateTimeSpan ts;
_RecordsetPtr CountRecordset;
while(!DATAVALUE.m_pRecordset->adoEOF)
{
varD=DATAVALUE.m_pRecordset->GetCollect("DATATIME");
timeD1=varD.date; WGT1=(double)DATAVALUE.m_pRecordset->GetCollect("WGT1_REL");
WGT2=(double)DATAVALUE.m_pRecordset->GetCollect("WGT2_REL"); SUM+=(WGT1+WGT2)*0.6
if(SUM>=SETVALUE)
{
varD1=DATAVALUE.m_pRecordset->GetCollect("DATATIME");
timeD2=varD1.date;
ts=timeD2-timeD1;
TIME=ts.GetTotalMinutes();
strSQL.Format("select count(*) as vCount1 from DATAVALUE where DATATIME between to_date('timeD1','yyyy-mm-dd hh24:mi:ss') and to_date('timeD2','yyyy-mm-dd hh24:mi:ss')",strTem,strTem);
CountRecordset = DATAVALUE.m_pConnection->Execute(_bstr_t(strSQL),&vCount1,adCmdText);
vCount1 = CountRecordset->GetCollect("vCount1");
NUMBER=vCount1.intVal;
CountRecordset.Release();
}
DATAVALUE.MoveNext(); }
RESULE.AddNew();
RESULE.m_pRecordset->PutCollect("BEG_TIME",timeD1);
RESULE.m_pRecordset->PutCollect("END_TIME",timeD2);
RESULE.m_pRecordset->PutCollect("T_R",TIME);
RESULE.m_pRecordset->PutCollect("NUM",NUMBER);
RESULE.Update();
RESULE.close();
DATAVALUE.close();