获得oracle数据表中日期时间类型记录:有两条记录:第一个:开始计算时读取的日期字段;第二个从开始计算起,不断求某一值,当这个值满足条件后,读取这个日期时间记录,作为这个记录的值。    在第二条记录读数之前,第一条记录的日期时间值保持不变,读完第二条后,把第一条记录移动到下一条,该值作为第一个记录的新值,之后开始计算,直到重新满足上述条件,读取第二个记录,并把第一个记录的值移动到下一条,……依次类推,完成整个计算。请教第一个记录怎么控制读取?

解决方案 »

  1.   

    如果只想用oracle恐怕难
    用VC应该容易实现,设置一个基准指针pbase,再设一个当前指针pnow,根据你的需要更换它们和其中的值。
      

  2.   

    就是通过VC++中进行计算读取oracle数据库中表字段
      

  3.   

    是否直接可以通过SQL的语句进行控制
      

  4.   

    用Oracle过程控制语言PLSQL去做,循环游标读取,一笔一笔处理
      

  5.   

    PLSQL也可以.设置两个date变量.在开始计算时select systime into
    在得到值后再select into就可以了.
    具体计算的实现看你需求决定
      

  6.   


    是在VC++中编辑的,我已经设定了两个 COleDateTime 变量,用来存储这两个变量,最后通过ADO连接添加到新的oracle数据表中,就是这个不断控制循环不知道怎么写。
      

  7.   


    下面是我大致写的: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();
      

  8.   

    timed1的取值应该提取到while前.不应该放到循环内部.