Wie ich Daten abrufen.?

Nachdem Sie die Datenquelle, die Sitzung und die Rowset-Objekte geöffnet haben, können Sie Daten abrufen. Je nach Art der Accessor, die Sie verwenden, können Sie Spalten binden müssen. Gehen folgendermaßen Sie vor um Daten abzurufen,:

  1. Öffnen Sie das Rowset mit dem entsprechenden Befehl Öffnen.

  2. Wenn Sie CManualAccessorverwenden, binden Sie die Ausgabespalten, wenn Sie dies nicht bereits getan haben. Zum Binden der Spalten rufen Sie GetColumnInfo auf, dann erstellen Sie einen Accessor mit den Bindungen, wie hier gezeigt:
     / / Aus der DBViewer-Beispiel CDBTreeView::OnQueryEdit
    / / Get die Spalteninformationen
    ULONG UlColumnsnbsp;      = 0;
    DBCOLUMNINFO * pColumnInfo = NULL;
    LPOLESTR pStrings = NULL;
    Wenn (Rs.GetColumnInfo(&ulColumns, &pColumnInfo, &pStrings)! = S_OK)
    AfxThrowOLEDBException (rs.m_pRowset, IID_IColumnsInfo);
    Struct MYBIND * pBind = neue MYBIND [UlColumns];
    Rs.CreateAccessor (UlColumns & pBind [0], sizeof(MYBIND)*ulColumns);
    für (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. Schreiben Sie eine while -Schleife zum Abrufen der Daten. In der Schleife MoveNext , um den Cursor und den Rückgabewert gegen S_OK, testen rufen Sie auf, wie im folgenden Beispiel gezeigt:
    während (Rs.Move&Next() == S_OK)
    {
     Nbsp; / / Fügen Sie Code zum Abrufen von Daten hier
       / / Wenn Sie kein Autoaccessor verwenden, rufen Sie Rs.GetData()
    }
    
  4. Innerhalb der while -Schleife können Sie die Daten entsprechend Ihrer Accessortyp abrufen.
    • Wenn Sie die CAccessor -Klasse verwenden, sollten Sie einen Benutzerdatensatz verfügen, der Datenmember enthält. Sie können Ihre Daten mit diesen Datenmember zugreifen, wie hier gezeigt:
      während (Rs.Move&Next() == S_OK)
      {
       Nbsp; / / Die Datenmember direkt verwenden. In diesem Fall, m_nFooID
         / / ist in ein Benutzerdatensatz, der von abgeleitet wird deklariert
         / / CAccessor
         Wsprintf ("%d", rs.m_nFooID); 
      }
      
    • Wenn Sie die Klassen CDynamicAccessor oder CDynamicParameterAccessor verwenden, können Sie Daten abrufen mithilfe der Zugriffsfunktionen GetValue und GetColumn, wie im folgenden Code gezeigt. Wenn Sie den Typ der Daten zu bestimmen, die Sie verwenden möchten, verwenden Sie GetType.
      während (Rs.MoveNext() == S_OK)
      {
       Nbsp; / / Verwenden Sie die dynamischen Accessor-Funktionen zum Abrufen Ihrer
         / / Daten
      
      ULONG UlColumns = Rs.GetColumnCount()];
         für (ULONG ich = 0; i < UlColumns; i++)
         {
           Rs.GetValue(i);
         }
      }
      
    • Wenn Sie CManualAccessorverwenden, müssen Sie die eigenen Datenmember angeben, sie selbst binden und darauf direkt zugreifen, wie hier gezeigt:
      während (Rs.Move&Next() == S_OK)
      {
       Nbsp; / / Verwenden Sie in den Aufrufen angegeben Daten-Member
         / / AddBindEntry.
      
      Wsprintf ("%s", SzFoo);
      }
      

Index