Pobieranie danych
Po otwarciu źródła danych, sesji i obiekty zestaw wierszy, można pobrać danych.W zależności od typu akcesora, którego używasz konieczne może być powiązanie kolumn.
Do pobierania danych
Otwórz zestaw wierszy przy użyciu właściwej Otwórz polecenia.
Jeśli używasz CManualAccessor, powiązać kolumn wyjściowych, jeśli nie masz jeszcze zrobione.Powiązać kolumn, call GetColumnInfo, a następnie utworzyć akcesora z powią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();
Napisać while pętli do pobierania danych.W pętli, zadzwoń pod numer MoveNext z góry kursor i przetestować wartość zwracana 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 ramach while pętli, można pobierać dane według typu sieci dostępu.
Jeśli używasz CAccessor klasa, powinna mieć rekordu użytkownika, zawierający elementy danych.Można dostępu do danych przy użyciu tych elementów członkowskich danych, 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 używasz CDynamicAccessor lub CDynamicParameterAccessor klasy, można pobrać danych 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 używasz, użyj 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 używasz CManualAccessor, należy określić własne danych członków, wiążą się i uzyskać do nich dostęp bezpośrednio, 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); }