Pobieranie danych
Po otwarciu źródła danych, sesji i obiektów zestawu wierszy, można pobrać danych.W zależności od typu akcesor, którego używasz może być potrzebne związanie kolumn.
Do pobierania danych
Otwórz zestaw wierszy przy użyciu odpowiednich Otwórz polecenia.
Jeśli używasz CManualAccessor, powiązać kolumn wyjściowych, jeśli nie można już wykonane.Powiązać kolumn, call GetColumnInfo, a następnie utworzyć akcesor operacji wiązania, jak pokazano w następującym przykładzie:
// 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();
Zapis while pętli do pobierania danych.W pętli, zadzwoń pod numer MoveNext wyprzedzeniem kursor i przetestować zwracana wartość przeciwko S_OK, jak pokazano w następującym przykładzie:
while (rs.MoveNext() == S_OK) { // Add code to fetch data here // If you are not using an auto accessor, call rs.GetData() }
W while pętli, dane można fetch zgodnie z sieci typu dostępu.
Jeśli korzystasz z CAccessor klasy, powinien mieć rekordu użytkownika, zawierający dane członków.Dostęp można uzyskać danych przy użyciu tych danych członków, jak pokazano w następującym przykładzie:
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); }
Jeśli korzystasz z CDynamicAccessor lub CDynamicParameterAccessor klasy, można pobrać dane przy użyciu funkcji dostęp do GetValue i GetColumn, jak pokazano w następującym przykładzie.Jeśli chcesz określić typ danych jest używany, należy użyć 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); } }
Jeśli korzystasz z CManualAccessor, muszą określać swoje własne elementy danych, powiązać samodzielnie i ich bezpośredni dostęp, jak pokazano w następującym przykładzie:
while (rs.MoveNext() == S_OK) { // Use the data members you specified in the calls to // AddBindEntry. wsprintf_s("%s", szFoo); }