Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico explica o processo RFX. Este é um tópico avançado que abrange:
O processo RFX
Observação
Este tópico aplica-se a classes derivadas de CRecordset nas quais a busca em massa de linhas não foi implementada. Se estiver a usar a obtenção de linhas em massa, a troca de campos de registo em massa (Bulk RFX) será implementada. O "Bulk RFX" é semelhante ao "RFX". Para entender as diferenças, consulte Recordset: Obtenção de Registos em Lote (ODBC).
RFX e o Recordset
Os membros de dados de campo do objeto do conjunto de registros, em conjunto, constituem um buffer de edição que contém as colunas selecionadas de um registro. Quando o conjunto de registros é aberto pela primeira vez e está prestes a ler o primeiro registro, a RFX vincula (associa) cada coluna selecionada ao endereço do membro de dados de campo apropriado. Quando o conjunto de registros atualiza um registro, a RFX chama funções de API ODBC para enviar uma instrução SQL UPDATE ou INSERT para o driver. RFX usa o seu conhecimento dos membros de dados de campo para especificar as colunas a serem escritas.
A estrutura faz backup do buffer de edição em determinados estágios para que ele possa restaurar seu conteúdo, se necessário. A RFX faz backup do buffer de edição antes de adicionar um novo registro e antes de editar um registro existente. Ele restaura o buffer de edição em alguns casos, por exemplo, após uma chamada Update após AddNew. O buffer de edição não será restaurado se você abandonar um buffer de edição recém-alterado, por exemplo, movendo-se para outro registro antes de chamar Update.
Além de trocar dados entre a fonte de dados e os membros de dados de campo do conjunto de registros, a RFX gerencia parâmetros de vinculação. Quando o conjunto de registos é aberto, todos os parâmetros de dados são vinculados na ordem dos marcadores de posição "?" na instrução SQL que CRecordset::Open constrói. Para obter mais informações, consulte Recordset: parametrizando um conjunto de registros (ODBC).
A substituição da sua classe de conjunto de DoFieldExchange registros faz todo o trabalho, movendo dados em ambas as direções. Assim como a troca de dados de diálogo (DDX), o RFX precisa de informações sobre os membros de dados da sua classe. O assistente fornece as informações necessárias escrevendo uma implementação específica do conjunto de registros para você, com base nos nomes de membros de dados de campo e tipos de DoFieldExchange dados especificados com o assistente.
Processo de troca de campo de registro
Esta seção descreve a sequência de eventos RFX quando um objeto de conjunto de registros é aberto e como você adiciona, atualiza e exclui registros. A tabela Sequência de operações RFX durante a abertura do conjunto de registros e a tabela Sequência de operações RFX durante a rolagem neste tópico mostram o processo como a RFX processa um Move comando no conjunto de registros e como a RFX gerencia uma atualização. Durante esses processos, DoFieldExchange é chamado para executar muitas operações diferentes. O m_nOperation membro de dados do objeto CFieldExchange determina qual operação é solicitada. Você pode achar útil ler Recordset: How Recordsets Select Records (ODBC) e Recordset: How Recordsets Update Records (ODBC) antes de ler este material.
RFX: Associação inicial de colunas e parâmetros
As seguintes atividades RFX ocorrem, na ordem mostrada, quando chama a função membro Open de um objeto conjunto de registos:
Se o conjunto de registros tiver membros de dados de parâmetro, a estrutura chamará
DoFieldExchangepara vincular os parâmetros a espaços reservados de parâmetro na cadeia de caracteres de instrução SQL do conjunto de registros. Uma representação do valor do parâmetro, dependente do tipo de dados, é utilizada para cada espaço reservado encontrado na instrução SELECT. Isso ocorre depois que a instrução SQL é preparada, mas antes de ser executada. Para obter informações sobre a preparação da instrução, consulte a função::SQLPreparena Referência do Programador ODBC.A estrutura chama
DoFieldExchangeuma segunda vez para vincular os valores das colunas selecionadas aos membros de dados de campo correspondentes no conjunto de registros. Isso estabelece o objeto do conjunto de registros como um buffer de edição que contém as colunas do primeiro registro.O conjunto de registros executa a instrução SQL e a fonte de dados seleciona o primeiro registro. As colunas do registro são carregadas nos membros de dados de campo do conjunto de registros.
A tabela a seguir mostra a sequência de operações RFX quando você abre um conjunto de registros.
Sequência de operações RFX durante a abertura do conjunto de registros
| A sua operação | Operação DoFieldExchange | Operação de banco de dados/SQL |
|---|---|---|
| 1. Abra o conjunto de registros. | ||
| 2. Crie uma instrução SQL. | ||
| 3. Envie o SQL. | ||
| 4. Associar membros dos dados de parâmetros. | ||
| 5. Vincular atributos de dados de campo a colunas. | ||
| 6. ODBC faz a movimentação e preenche os dados. | ||
| 7. Corrija os dados para C++. |
Os conjuntos de registros usam a execução preparada do ODBC para permitir uma nova consulta rápida com a mesma instrução SQL. Para obter mais informações sobre a execução preparada, consulte a Referência do programador ODBC.
RFX: Rolagem
Quando você rola de um registro para outro, a estrutura chama DoFieldExchange para substituir os valores armazenados anteriormente nos membros de dados de campo por valores para o novo registro.
A tabela a seguir mostra a sequência de operações RFX quando o usuário se move de registro para registro.
Sequência de operações RFX durante a rolagem
| A sua operação | Operação DoFieldExchange | Operação de banco de dados/SQL |
|---|---|---|
1. Chame MoveNext ou uma das outras funções Move. |
||
| 2. ODBC faz a movimentação e preenche os dados. | ||
| 3. Corrija os dados para C++. |
RFX: Adicionando novos registros e editando registros existentes
Se você adicionar um novo registro, o conjunto de registros funcionará como um buffer de edição para criar o conteúdo do novo registro. Assim como acontece com a adição de registros, a edição de registros envolve a alteração dos valores dos membros de dados de campo do conjunto de registros. Do ponto de vista da RFX, a sequência é a seguinte:
Sua chamada para a função membro AddNew ou Edit do recordset faz com que o RFX armazene o buffer de edição atual, permitindo que ele seja restaurado mais tarde.
AddNewouEditprepara os campos no buffer de edição para que a RFX possa detetar membros de dados de campo alterados.Como um novo registro não tem valores anteriores com os quais comparar os novos,
AddNewdefine o valor de cada membro de dados de campo como um valor PSEUDO_NULL. Mais tarde, ao chamarUpdate, RFX compara o valor de cada membro de dados com o valor PSEUDO_NULL. Se houver uma diferença, o membro de dados foi definido. (PSEUDO_NULL não é o mesmo que uma coluna de registro com um valor Null verdadeiro nem é o mesmo que C++ NULL.)Ao contrário da
Updatechamada paraAddNew, aUpdatechamada paraEditcompara valores atualizados com valores armazenados anteriormente em vez de usar PSEUDO_NULL. A diferença é queAddNewnão tem valores armazenados anteriormente para comparação.Você define diretamente os valores dos membros de dados de campo cujos valores você deseja editar ou que deseja preencher para um novo registro. Isso pode incluir chamar
SetFieldNull.Sua chamada para Atualização verifica se há membros de dados de campo alterados, conforme descrito na etapa 2 (consulte a tabela Sequência de operações RFX durante a rolagem). Se nenhum tiver sido alterado,
Updatedevolve 0. Se alguns membros de dados de campo tiverem sido alterados,Updateprepara e executa uma instrução SQL INSERT que contém valores para todos os campos atualizados no registro.Para
AddNew,Updateconclui restaurando os valores armazenados anteriormente do registro que estava atualizado antes daAddNewchamada. ParaEdit, os novos valores editados permanecem em vigor.
A tabela a seguir mostra a sequência de operações RFX quando você adiciona um novo registro ou edita um registro existente.
Sequência de operações RFX durante as funções Adicionar Novo e Editar
| A sua operação | Operação DoFieldExchange | Operação de banco de dados/SQL |
|---|---|---|
1. Ligue AddNew ou Edit. |
||
| 2. Faça backup do buffer de edição. | ||
3. Para AddNew, marque os membros de dados de campo como "limpos" e Nulo. |
||
| 4. Atribua valores aos membros de dados de campo do conjunto de registros. | ||
5. Ligue para Update. |
||
| 6. Verifique se há campos alterados. | ||
7. Crie a instrução SQL INSERT para AddNew ou a instrução UPDATE para Edit. |
||
| 8. Envie o SQL. | ||
9. Para AddNew, restaure o buffer de edição para seu conteúdo de backup. Para Edit, exclua o backup. |
RFX: Excluindo registros existentes
Quando você exclui um registro, RFX define todos os campos como NULL como um lembrete de que o registro foi excluído e você deve sair dele. Você não precisa de nenhuma outra informação de sequência RFX.
Ver também
Troca de campos de registro (RFX)
MFC ODBC Consumo
Macros, funções globais e variáveis globais
Classe CFieldExchange
CRecordset::D oFieldExchange