Partilhar via


Conjunto de registros: Como os conjuntos de registros selecionam registros (ODBC)

Observação

O assistente MFC ODBC Consumer não está disponível no Visual Studio 2019 e em versões posteriores. Você ainda pode criar um consumidor manualmente.

Este tópico se aplica às classes ODBC do MFC.

Este tópico explica:

Os conjuntos de registros selecionam registros de uma fonte de dados por meio de um driver ODBC enviando instruções SQL para o driver. O SQL enviado depende de como você projeta e abre sua classe de conjunto de registros.

Suas opções na seleção de registros

A tabela a seguir mostra suas opções na seleção de registros.

Como e quando você pode afetar um conjunto de registros

Quando você Pode
Declare sua classe de conjunto de registros com o assistente Adicionar classe Especifique qual tabela selecionar.

Especifique quais colunas incluir.

Consulte Adicionar um consumidor ODBC MFC.
Conclua a implementação da classe do conjunto de registros Substitua funções de membro, como OnSetOptions (avançadas), para definir opções específicas do aplicativo ou para alterar padrões. Especifique os membros de dados de parâmetro se desejar um conjunto de registros parametrizado.
Construir um objeto de conjunto de registros (antes de chamar Open) Especifique uma condição de pesquisa (possivelmente composta) para uso em uma cláusula WHERE que filtra os registros. Consulte Recordset: Filtering Records (ODBC).

Especifique uma ordem de classificação para uso em uma cláusula ORDER BY que classifica os registros. Consulte Recordset: Sorting Records (ODBC).

Especifique valores de parâmetros para quaisquer parâmetros adicionados à classe. Consulte Recordset: Parametrizando um conjunto de registros (ODBC).

|Execute a consulta do conjunto de registros chamando Open|Especifique uma cadeia de caracteres SQL personalizada para substituir a cadeia de caracteres SQL padrão configurada pelo assistente. Consulte CRecordset::Open na Referência da Biblioteca de Classes e SQL: Personalizando a instrução SQL do seu conjunto de registros (ODBC).|

Ligue Requery para reconsultar o conjunto de registos com os valores mais recentes na fonte de dados|Especifique novos parâmetros, filtrar ou ordenar. Consulte Recordset: Requerying a Recordset (ODBC).

Como um conjunto de registros constrói sua instrução SQL

Quando você chama a função de membro Open de um objeto de conjunto de registros, Open constrói uma instrução SQL usando alguns ou todos os seguintes ingredientes:

  • O parâmetro lpszSQL passou para Open. Se não for NULL, esse parâmetro especifica uma cadeia de caracteres SQL personalizada ou parte de uma. A estrutura analisa a cadeia de caracteres. Se a cadeia de caracteres for uma instrução SQL SELECT ou uma instrução ODBC CALL , a estrutura usará a cadeia de caracteres como a instrução SQL do conjunto de registros. Se a cadeia de caracteres não começar com "SELECT" ou "{CALL", a estrutura usará o que é fornecido para construir uma cláusula SQL FROM .

  • A cadeia de caracteres retornada por GetDefaultSQL. Por padrão, esse é o nome da tabela especificada para o conjunto de registros no assistente, mas você pode alterar o que a função retorna. A estrutura chama GetDefaultSQL — se a cadeia de caracteres não começar com "SELECT" ou "{CALL", presume-se que seja um nome de tabela, que é usado para construir uma cadeia de caracteres SQL.

  • Os membros de dados de campo do conjunto de registros, que devem ser vinculados a colunas específicas da tabela. A estrutura vincula colunas de registro aos endereços desses membros, usando-os como buffers. A estrutura determina a correlação dos membros de dados de campo com colunas de tabela das chamadas de função RFX ou RFX em massa na função de membro DoFieldExchange ou DoBulkFieldExchange do conjunto de registros.

  • O filtro para o conjunto de dados, se existir, está contido no membro de dados m_strFilter. A estrutura usa essa cadeia de caracteres para construir uma cláusula SQL WHERE .

  • A ordem de ordenação do conjunto de registos, se existir, está contida no membro de dados m_strSort. A estrutura usa essa cadeia de caracteres para construir uma cláusula SQL ORDER BY .

    Sugestão

    Para usar a cláusula SQL GROUP BY e possivelmente a cláusula HAVING, acrescente as cláusulas ao final da string de filtro.

  • Os valores de quaisquer membros de dados de parâmetro especificados para a classe. Você define valores de parâmetro imediatamente antes de chamar Open ou Requery. A estrutura associa os valores dos parâmetros aos espaços reservados "?" na string SQL. Em tempo de compilação, você especifica a cadeia de caracteres com espaços reservados. Em tempo de execução, a estrutura preenche os detalhes com base nos valores de parâmetro que você passa.

Open constrói uma instrução SQL SELECT a partir desses ingredientes. Consulte Personalizando a seleção para obter detalhes sobre como a estrutura usa os ingredientes.

Depois de construir a instrução, Open envia o SQL para o Gerenciador de Driver ODBC (e a Biblioteca de Cursores ODBC, se estiver na memória), que o envia para o driver ODBC para o DBMS específico. O motorista se comunica com o DBMS para realizar a seleção na fonte de dados e busca o primeiro registro. A estrutura carrega o registro nos membros de dados de campo do conjunto de registros.

Você pode usar uma combinação dessas técnicas para abrir tabelas e construir uma consulta com base em uma junção de várias tabelas. Com personalização adicional, você pode chamar consultas predefinidas (procedimentos armazenados), selecionar colunas de tabela desconhecidas em tempo de design e vinculá-las a campos de conjunto de registros ou pode executar a maioria das outras tarefas de acesso a dados. As tarefas que você não pode realizar personalizando conjuntos de registros ainda podem ser realizadas chamando funções de API ODBC ou executando diretamente instruções SQL com CDatabase::ExecuteSQL.

Personalizando a seleção

Além de fornecer um filtro, uma ordem de classificação ou parâmetros, você pode executar as seguintes ações para personalizar a seleção do seu conjunto de registros:

  • Passe uma cadeia de caracteres SQL personalizada em lpszSQL quando você chamar Open para o conjunto de registros. Qualquer coisa que passar em lpsqSQL terá precedência sobre o que a função membro GetDefaultSQL retorna.

    Para obter mais informações, consulte SQL: Customizing Your Recordset's SQL Statement (ODBC), que descreve os tipos de instruções SQL (ou instruções parciais) para Open as quais você pode passar e o que a estrutura faz com elas.

    Observação

    Se a cadeia de caracteres personalizada que você passar não começar com "SELECT" ou "{CALL", MFC assume que contém um nome de tabela. Isso também se aplica ao próximo item com marcadores.

  • Altere a cadeia de caracteres que o assistente escreve na função de membro do seu conjunto de dados GetDefaultSQL. Edite o código da função para alterar o que ela retorna. Por padrão, o assistente escreve uma GetDefaultSQL função que retorna um único nome de tabela.

    Você pode retornar GetDefaultSQL qualquer um dos itens que você pode passar no parâmetro lpszSQL para Open. Se você não passar uma cadeia de caracteres SQL personalizada em lpszSQL, a estrutura usará a cadeia de caracteres que GetDefaultSQL retorna. No mínimo, GetDefaultSQL deve retornar um único nome de tabela. Mas você pode fazer com que ele retorne vários nomes de tabela, uma instrução SELECT completa, uma instrução ODBC CALL e assim por diante. Para obter uma lista do que podes passar para lpszSQL — ou ter GetDefaultSQL retornar — consulta SQL: Personalizando a Declaração SQL do Seu Recordset (ODBC).

    Se você estiver executando uma junção de duas ou mais tabelas, reescreva GetDefaultSQL para personalizar a lista de tabelas usada na cláusula SQL FROM . Para obter mais informações, consulte Recordset: Executando uma junção (ODBC).

  • Vincule manualmente membros de dados adicionais de campo, talvez com base nas informações que obtiver sobre o esquema da sua fonte de dados durante a execução. Você adiciona membros de dados de campo à classe de conjunto de registros, faz chamadas para as funções RFX ou RFX em massa para o membro da função DoFieldExchange ou DoBulkFieldExchange, e inicializa os membros de dados no construtor da classe. Para obter mais informações, consulte Recordset: Dynamically Binding Data Columns (ODBC).

  • Substitua as funções de membro do recordset, como OnSetOptions, para definir opções específicas do aplicativo ou para substituir as predefinições.

Se você quiser basear o conjunto de registros em uma instrução SQL complexa, precisará usar alguma combinação dessas técnicas de personalização. Por exemplo, talvez você queira usar cláusulas SQL e palavras-chave não suportadas diretamente por conjuntos de registros ou talvez esteja ingressando em várias tabelas.

Ver também

Conjunto de registros (ODBC)
Conjunto de registros: Como os conjuntos de registros atualizam registros (ODBC)
Noções básicas de ODBC
SQL
Conjunto de registros: Bloqueando registros (ODBC)