根据时间段查询单点历史记录com_ar_query_raw_records_c

Navigation:  功能明细 > 数据接口 > COM接口 > VC接口 >

根据时间段查询单点历史记录com_ar_query_raw_records_c

Previous pageReturn to chapter overviewNext page

函数

STDMETHOD(com_ar_query_raw_records_c)(

LONG nTagID,

Com_hdTime* pStartTime,

Com_hdTime* pEndTime,

LONG* pRecNum,

SAFEARRAY** records

);

 

参数

[in]LONG nTagID,TagID

[in]Com_hdTime* pStartTime, 查询的起始时间戳

[in]Com_hdTime* pEndTime, 查询的结束时间戳

[in, out]LONG* pRecNum, in:待查的记录数量。out:实际返回的记录的数量。若小于要查询的记录数量,则表示该时间段的记录全部查完;若等于要查询的数量,则表示在该时间段内还有记录没有查完,用户可以根据返回的最后一条记录的时间来重新设置结束时间,然后再次调用该接口来查询剩下的记录。记录个数不能超过65535。必须是LONG类型。

[out]SAFEARRAY(Com_hdRecord)* records记录的值数组

 

返回值

查询成功,返回RD_SUCCESS,不是所有的都成功返回EC_HD_API_QUERY_SNAPSHOTS_FAILED。查询失败返回其它错误码,见error_code.h。

 

说明

1.查询一个Tag在一个时间段内的记录,该接口支持所有的数据类型。

2.该接口的时间戳精确到秒。例如:开始时间为“2001-1-1 08:08:08. 111”,结束时间是为“2001-1-2 08:08:08. 222”,查询到的记录是“2001-1-1 08:08:08. 000”到“2001-1-2 08:08:08. 000”范围内的原始记录。

 

举例

 

images_copycode!MISSING PHRASE 'COPYCODE'!

HRESULT hr ;

   BSTR szIP = ::SysAllocString( L"127.0.0.1" );

     BSTR szBalIP = ::SysAllocString( L"1.1.1.1" );

     LONG nPort = 5678;

     LONG nBakPort = 1234;

     LONG nTimeOut = 3;

   

     hr = m_pabc->com_nt_connect_c(szIP, nPort, nBakIP, nBakPort, nTimeOut);

     if (hr != S_OK)

     {

          return;

     }

 

    LONG nRecNum =200;

    LONG nTagID = 1;

 

    // 组织传入数据

     Com_hdTime comStartTime,comEndTime;

     comStartTime.nSec = 1378706236;

     comStartTime.nMsec = 0;

     comEndTime.nSec = 1378709836;

     comEndTime.nMsec = 0;

 

 

    //传出数据的变量

    SAFEARRAY* pSaRecords = NULL;

 

    hr = m_pabc->com_ar_query_raw_records_c( nTagID, &comStartTime, &comEndTime, &nRecNum ,&pSaRecords);

    if (hr != S_OK)

    {

        return;

    }

 

    //获取传出的record

    Com_hdRecord *pcomrecord = NULL;

    hr = SafeArrayAccessData(pSaRecords, (void HUGEP **)&pcomrecord);

    if(hr != S_OK)

    {

        return;

    }

 

    //释放内部BSTR数据

    LONG LBound;

    LONG UBound;

    SafeArrayGetLBound(pSaRecords, 1, &LBound);

    SafeArrayGetUBound(pSaRecords, 1, &UBound);

 

    for(LONG i = LBound;  i<= UBound; i++)

    {

        ::SysFreeString( pcomrecord[i-LBound].value );

    }

 

    hr = m_pabc->com_nt_disconnect_c();

    if (hr != S_OK)

    {

        return;

    }

 

    SafeArrayDestroy(pSaRecords);

::SysFreeString( szBalIP );

    ::SysFreeString( szIP );