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ê estiver usando, talvez você precise ligar colunas.
Para buscar dados
Abra o conjunto de linhas usando o apropriado Abrir comando.
Se você estiver usando CManualAccessor, ligar as colunas de saída, se já não tiver feito isso.Para vincular as colunas, chame GetColumnInfoe crie um acessador com 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 loop para recuperar os 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 a 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 os 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, 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); }