Načítání dat
Po otevření zdroje dat, relace a objektů sady řádků, můžete načíst data.V závislosti na typu přistupujícího objektu, který používáte, budete možná potřebovat vázat sloupce.
Chcete-li načíst data
Otevřete sady řádků použitím vhodného příkazu Open.
Pokud používáte CManualAccessor, navázejte výstupní sloupce pokud jste tak ještě neučinili. Chcete-li navázet sloupce, zavolejte GetColumnInfo a poté vytvořte přistupující objekt s vazbami, jak je znázorněno v následujícím příkladu:
// 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();
Napište smyčku while k načtení dat. Ve smyčce zavolejte MoveNext k upřesnění kurzoru a testu vrácené hodnoty na S_OK, jak je znázorněno v následujícím příkladu:
while (rs.MoveNext() == S_OK) { // Add code to fetch data here // If you are not using an auto accessor, call rs.GetData() }
V rámci smyčky while může načíst data podle typu Vašeho přistupujícího objektu.
Používáte-li třídu CAccessor, měli byste mít uživatelský záznam, který obsahuje datové členy.Můžete přistupovat k Vaším datům použitím těchto datových členů, jak je znázorněno v následujícím příkladu:
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); }
Používáte-li třídu CDynamicAccessor nebo třídu CDynamicParameterAccessor můžete načíst data pomocí přístupujících funkcí GetValue a GetColumn jak je ukázáno v následujícím příkladu. Pokud chcete určit typ dat, které používáte, použijte 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); } }
Používáte-li CManualAccessor, musíte zadat vlastní datové členy, navázané samy na sebe a přistupovat k nim přímo, jak je znázorněno v následujícím příkladu:
while (rs.MoveNext() == S_OK) { // Use the data members you specified in the calls to // AddBindEntry. wsprintf_s("%s", szFoo); }