Buscando dados
Depois de abrir a fonte de dados, sessão e objetos de conjunto de linhas, você pode buscar dados. Dependendo do tipo de acessador que você está usando, talvez você precise ligar as colunas.
Para buscar dados
Abra o conjunto de linhas usando o apropriado Abrir comando.
Se você estiver usando CManualAccessor, vincule as colunas de saída, se você ainda não fez SO. Para vincular as colunas, chame GetColumnInfoe crie um acessador com as ligações, conforme mostrado no exemplo a seguir:
// 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();
Escrever um while o loop para recuperar dados. No loop, chamada MoveNext para avançar o cursor e testar o valor de retorno contra S_OK, conforme mostrado no exemplo a seguir:
while (rs.MoveNext() == S_OK) { // Add code to fetch data here // If you are not using an auto accessor, call rs.GetData() }
Dentro do while loop, você pode buscar os dados de acordo com seu tipo de acessador.
Se você usar o CAccessor classe, você deve ter um registro de usuário que contém membros de dados. Você pode acessar seus dados usando esses membros de dados, conforme mostrado no exemplo a seguir:
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); }
Se você usar o CDynamicAccessor ou CDynamicParameterAccessor classe, você pode buscar dados usando as funções de acessa GetValue e GetColumn, conforme mostrado no exemplo a seguir. Se você quiser determinar o tipo de dados você está usando, use 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); } }
Se você usar CManualAccessor, você deve especificar seus próprios membros de dados, ligá-los e acessá-los diretamente, como mostrado no exemplo a seguir:
while (rs.MoveNext() == S_OK) { // Use the data members you specified in the calls to // AddBindEntry. wsprintf_s("%s", szFoo); }