Comment récupérer données?

Après que vous ouvrez la source de données, session et objets jeu de lignes, vous pouvez extraire les données. Selon le type d'accesseur que vous utilisez, vous devrez lier des colonnes. Pour extraire les données, procédez comme suit:

  1. Ouvrez le jeu de lignes à l'aide de la commande Open.

  2. Si vous utilisez CManualAccessor, liez les colonnes de sortie si vous ne le n'avez pas déjà fait. Pour lier les colonnes, appelez GetColumnInfo, puis créer un accesseur avec les liaisons, comme illustré ici:
     / / De la CDBTreeView::OnQueryEdit de l'exemple DBVIEWER
    / / Obtenir les informations de colonne
    ULONG ulColumnsnbsp ;      = 0 ;
    DBCOLUMNINFO * pColumnInfo = NULL ;
    LPOLESTR pStrings = NULL ;
    Si (rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings)! = S_OK)
    AfxThrowOLEDBException (rs.m_pRowset, IID_IColumnsInfo) ;
    struct MYBIND * commandes pBind = nouvelle MYBIND [ulColumns] ;
    RS.CreateAccessor (ulColumns, & commandes pBind [0], sizeof(MYBIND)*ulColumns) ;
    pour (ULONG l = 0; l < ulColumns; l ++)
    RS.AddBindEntry (l + 1, DBTYPE_STR, sizeof (TCHAR) * 40, & commandes pBind [l] .szvalue, NULL, & pBind[l].dwStatus) ;
    RS.Bind()
    
  3. Écrire une boucle tandis que pour récupérer les données. Dans la boucle, appelez MoveNext pour avancer le curseur et de tester la valeur de retour contre S_OK, comme illustré dans l'exemple suivant:
    alors que (rs.Move&Next() == S_OK)
    {
     nbsp ; / / Ajouter du code pour extraire les données ici
       / / Si vous n'utilisez pas un accesseur automatique, appelez rs.GetData()
    }
    
  4. Dans la boucle alors que , vous pouvez extraire les données selon votre type d'accesseur.
    • Si vous utilisez la classe CAccessor , vous devriez avoir un enregistrement utilisateur qui contient des données membres. Vous pouvez accéder à vos données à l'aide de ces données membres, comme indiqué ici:
      alors que (rs.Move&Next() == S_OK)
      {
       nbsp ; / / Utiliser les membres de données directement. Dans ce cas, m_nFooID
         / / est déclarée dans un enregistrement utilisateur qui dérive de
         / / CAccessor
         wsprintf (« %d », rs.m_nFooID) ; 
      }
      
    • Si vous utilisez la classe CDynamicAccessor ou CDynamicParameterAccessor , vous pouvez extraire des données en utilisant les fonctions d'accès GetValue et GetColumn, comme le montre le code suivant. Si vous souhaitez déterminer le type de données que vous utilisez, utilisez GetType.
      alors que (rs.MoveNext() == S_OK)
      {
       nbsp ; / / Utiliser les fonctions d'accesseur dynamique pour récupérer votre
         / / données
      
      ULONG ulColumns = rs.Et getColumnCount() inclus ;
         pour (ULONG I = 0; i < ulColumns; i ++)
         {
           RS.GetValue(i) ;
         }
      }
      
    • Si vous utilisez CManualAccessor, vous devez spécifier vos propres données membres, lier vous-même et y accéder directement, comme illustré ici:
      alors que (rs.Move&Next() == S_OK)
      {
       nbsp ; / / Utiliser les membres de données, vous avez spécifié dans les appels à
         / / AddBindEntry.
      
      wsprintf ("%s", szFoo) ;
      }
      

Index