Buscar dados
Depois de abrir a fonte de dados, a sessão e os objetos de conjunto de linhas, você poderá buscar dados. Dependendo do tipo de acessador que você está usando, pode ser necessário associar colunas.
Para buscar dados
Abra o conjunto de linhas usando o comando Open apropriado.
Se você estiver usando
CManualAccessor
, associe as colunas de saída se ainda não tiver feito isso. O exemplo a seguir foi tirado da amostra DBViewer. Para associar as colunas, chameGetColumnInfo
e crie um acessador com as associaçõ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();
Escreva um loop
while
para recuperar os dados. No loop, chameMoveNext
para avançar o cursor e testar o valor retornado em relação a 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 loop
while
, você pode buscar os dados de acordo com seu tipo de acessador.Se você usar a classe CAccessor, deverá ter um registro de usuário que contenha 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 a classe
CDynamicAccessor
ouCDynamicParameterAccessor
, poderá buscar dados usando as funções de acessoGetValue
eGetColumn
, conforme mostrado no exemplo a seguir. Se você quiser determinar o tipo de dados que está usando, useGetType
.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
, deverá especificar seus próprios membros de dados, associá-los por conta própria e acessá-los diretamente, conforme 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); }