Extraction de données
Une fois que vous avez ouvert la source de données, la session et les objets d’ensemble de lignes, vous pouvez extraire des données. Selon le type d’accesseur que vous utilisez, vous devrez peut-être lier des colonnes.
Pour extraire des données
Ouvrez l’ensemble de lignes à l’aide de la commande Open appropriée.
Si vous utilisez
CManualAccessor
, liez les colonnes de sortie si vous ne l’avez pas déjà fait. L’exemple suivant est extrait de l’exemple DBViewer . Pour lier les colonnes, appelezGetColumnInfo
, puis créez un accesseur avec les liaisons, comme illustré dans l’exemple suivant :// 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();
Écrivez une
while
boucle pour récupérer les données. Dans la boucle, appelezMoveNext
pour avancer le curseur et tester la valeur de retour sur S_OK, comme illustré dans l’exemple suivant :while (rs.MoveNext() == S_OK) { // Add code to fetch data here // If you are not using an auto accessor, call rs.GetData() }
Dans la
while
boucle, vous pouvez extraire les données en fonction de votre type d’accesseur.Si vous utilisez la classe CAccessor , vous devez avoir un enregistrement utilisateur qui contient des membres de données. Vous pouvez accéder à vos données à l’aide de ces membres de données, comme illustré dans l’exemple suivant :
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 vous utilisez le ou
CDynamicParameterAccessor
laCDynamicAccessor
classe, vous pouvez extraire des données à l’aide des fonctionsGetValue
d’accès etGetColumn
, comme illustré dans l’exemple suivant. Si vous souhaitez déterminer le type de données que vous utilisez, utilisezGetType
.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 vous utilisez
CManualAccessor
, vous devez spécifier vos propres membres de données, les lier vous-même et y accéder directement, comme illustré dans l’exemple suivant :while (rs.MoveNext() == S_OK) { // Use the data members you specified in the calls to // AddBindEntry. wsprintf_s("%s", szFoo); }