Compartir a través de


Recuperar datos

Después de abrir los objetos de origen de datos, sesión y conjunto de filas, puede capturar datos. En función del tipo de descriptor de acceso que use, es posible que tenga que enlazar columnas.

Para capturar datos

  1. Abra el conjunto de filas con el comando Open correspondiente.

  2. Si usa CManualAccessor, enlace las columnas de salida si aún no lo ha hecho. El siguiente código de ejemplo está tomado del ejemplo DBViewer. Para enlazar las columnas, llame a GetColumnInfo y cree un descriptor de acceso con los enlaces, como se muestra en el ejemplo siguiente:

    // From the DBViewer Sample CDBTreeView::OnQueryEdit
    // Get the column information
    ULONG ulColumns       = 0;
    DBCOLUMNINFO* pColumnInfo  = NULL;
    LPOLESTR pStrings      = NULL;
    if (rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings) != S_OK)
        ThrowMyOLEDBException(rs.m_pRowset, IID_IColumnsInfo);
    struct MYBIND* pBind = new MYBIND[ulColumns];
    rs.CreateAccessor(ulColumns, &pBind[0], sizeof(MYBIND)*ulColumns);
    for (ULONG l=0; l<ulColumns; l++)
    rs.AddBindEntry(l+1, DBTYPE_STR, sizeof(TCHAR)*40, &pBind[l].szValue, NULL, &pBind[l].dwStatus);
    rs.Bind();
    
  3. Escriba un bucle while para recuperar los datos. En el bucle, llame a MoveNext para avanzar el cursor y probar el valor devuelto con S_OK, como se muestra en el ejemplo siguiente:

    while (rs.MoveNext() == S_OK)
    {
        // Add code to fetch data here
        // If you are not using an auto accessor, call rs.GetData()
    }
    
  4. Dentro del bucle while, puede capturar los datos según el tipo de descriptor de acceso.

    • Si usa la clase CAccessor, debe tener un registro de usuario que contenga miembros de datos. Puede acceder a los datos usando esos miembros de datos, como se muestra en el ejemplo siguiente:

      while (rs.MoveNext() == S_OK)
      {
          // Use the data members directly. In this case, m_nFooID
          // is declared in a user record that derives from
          // CAccessor
          wsprintf_s("%d", rs.m_nFooID);
      }
      
    • Si usa la clase CDynamicAccessor o CDynamicParameterAccessor, puede capturar datos usando las funciones de acceso GetValue y GetColumn, como se muestra en el ejemplo siguiente. Si desea determinar el tipo de datos que está usando, utilice GetType.

      while (rs.MoveNext() == S_OK)
      {
          // Use the dynamic accessor functions to retrieve your data.
      
          ULONG ulColumns = rs.GetColumnCount();
          for (ULONG i=0; i<ulColumns; i++)
          {
              rs.GetValue(i);
          }
      }
      
    • Si usa CManualAccessor, debe especificar sus propios miembros de datos, enlazarlos usted mismo y acceder a ellos directamente, como se muestra en el ejemplo siguiente:

      while (rs.MoveNext() == S_OK)
      {
          // Use the data members you specified in the calls to
          // AddBindEntry.
      
          wsprintf_s("%s", szFoo);
      }
      

Consulte también

Trabajar con plantillas de consumidor OLE DB