从ADODB记录集中提取双精度值 [英] Extracting a double value from an ADODB recordset

查看:76
本文介绍了从ADODB记录集中提取双精度值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法从ADODB记录集中提取双精度浮点数的值.我想将值分配给C ++例程中的局部变量.我已经尝试过如下.

I''m having trouble extracting the value of a double-precision floating point number from an ADODB recordset. I want to assign the value to a local variable in my C++ routine. I''ve tried as follows.

double dblTemp = rst->Fields->GetItem("DoubleValue")->Value;



而且我也尝试过:



and I''ve also tried:

double dblTemp = rst->Fields->Item("DoubleValue")->Value;



但是两者都不起作用.有谁知道该怎么做并可以共享一个代码示例?我尝试查看Amit Dey的文章"ATL COM and ADO",但我需要一个带有双精度类型变量的示例.

请让我知道.

谢谢,
Carl Olen



But neither works. Does anyone know how to do this and can share a code example? I''ve tried looking at the article by Amit Dey entitled "ATL COM and ADO," but I need an example with a double type variable.

Please let me know.

Thanks,
Carl Olen

推荐答案

改为尝试Item.
Try Item instead.
rst->Fields->Item["DoubleValue"]->Value 


我发布了此代码,但是我无法对其进行测试,因为我无法在笔记本电脑上建立ADODB连接.很久以前,我写了这个.此代码使记录集成为快照.
I post this code but i cannot test it, because i cant establish an ADODB connection on my laptop. Its a long time ago i wrote this. This code makes a snapshot of a recordset.
RecordSetSnapshot::RecordSetSnapshot(ADODB::_RecordsetPtr* rset)
{
  long          count;
  unsigned int  ix,iy;
  long          colrow[2];

  _rows = 0;
  _cols = (*rset)->Fields->Count;

  try
  {

    _variant_t  fields = vtMissing;
    _variant_t  data   = (*rset)->GetRows(ADODB::adGetRowsRest,(long)ADODB::adBookmarkCurrent,fields);
    _variant_t  value;

    if( (VT_EMPTY!=data.vt) && (S_OK==::SafeArrayGetUBound(data.parray,2,&count)) )
    {
      _rows = 1 + count;

      for(ix=0;ix<_cols;ix++)
      {
        ADODB::Field*    field = 0;

        (*rset)->Fields->get_Item(_variant_t((long)ix),&field);
        // store the field name here: field->Name;

        field->Release();
      }

      for(ix=0;ix<_cols;ix++)
      {
        colrow[0] = ix;
        for(iy=0;iy<_rows;iy++)
        {
          colrow[1] = iy;
          if(S_OK==::SafeArrayGetElement(data.parray,colrow,&value))
          {
            // BSTR or something else. VT_R4 (is double)
            VariantChangeType(&value,&value,0,VT_BSTR);
            // store the value
            VariantClear(&value);
          }
        }
      }
    }

    VariantClear(&data);
    VariantClear(&fields);

  }
  catch(_com_error e)
  {
    TRACE(_S("Error: %s\r\n"),(TCHAR*)e.Description());
    Clear();
  }
  catch(...)
  {
    Clear();
  }

}


希望这会有所帮助.
问候.


Hope this helps.
Regards.


这是一个可行的解决方案,我将继续以收到的其他想法进行开发.谢谢!

double dblTemp;
FieldsPtr字段;
FieldPtr字段;
变量D_Value;
VariantInit(& D_Value);
D_Value.vt = VT_R8;
变量索引;
VariantInit(& Index);
Index.vt = VT_I4;
Index.lVal = 1; //要检索的double值的字段索引.

HRESULT hr = rst-> get_Fields(& fields);
if(SUCCEEDED(hr)){
hr = fields-> get_Item(Index,& field);
}
if(SUCCEEDED(hr)){
hr = field-> get_Value(& D_Value);
}
dblTemp = D_Value.dblVal;
Here''s one solution that worked and I''m continuing to develop with other ideas I''ve received. Thanks!

double dblTemp;
FieldsPtr fields;
FieldPtr field;
VARIANT D_Value;
VariantInit(&D_Value);
D_Value.vt = VT_R8;
VARIANT Index;
VariantInit(&Index);
Index.vt = VT_I4;
Index.lVal = 1; // index of the field with the double value to be retreived.

HRESULT hr=rst->get_Fields(&fields);
if(SUCCEEDED(hr)) {
hr=fields->get_Item(Index, &field);
}
if(SUCCEEDED(hr)) {
hr=field->get_Value(&D_Value);
}
dblTemp = D_Value.dblVal;


这篇关于从ADODB记录集中提取双精度值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆