Troca de campo do registro: Como funciona o RFX

Este tópico explica o processo RFX. Este é um avançado abrangente do tópico:

  • RFX e o conjunto de registros.

  • O processo RFX

ObservaçãoObservação

Este tópico se aplica a classes derivadas de CRecordset no qual linha em massa buscando não foi implementada. Se você estiver usando a busca de linha em massa, troca de campo de registro de massa (Bulk RFX) é implementada. RFX de massa é semelhante a RFX. Para entender as diferenças, consulte Recordset: Buscar registros em massa (ODBC).

RFX e o conjunto de registros.

Membros de dados de campo do objeto recordset, juntos, constituem um buffer de edição que mantém as colunas selecionadas de um registro. Quando o conjunto de registros é aberto pela primeira vez e é o primeiro registro de leitura, RFX ligações (associates) cada selecionado de coluna para o endereço do membro de dados de campo apropriado. Quando o conjunto de registros atualiza um registro, RFX chama as funções de API do ODBC para enviar um SQL atualização ou Inserir a instrução para o driver. RFX utiliza seu conhecimento dos membros de dados de campo para especificar as colunas para escrever.

A estrutura de backup do buffer de edição em determinados estágios para que ele possa restaurar seu conteúdo, se necessário. RFX faz o backup do buffer de edição antes de adicionar um novo registro e antes de editar um registro existente. Restaura o buffer de edição em alguns casos, por exemplo, após um atualização a seguir chamada AddNew. O buffer de edição não é restaurado se você abandonar um buffer de edição alterado recentemente, por exemplo, movendo para outro registro antes de chamar atualização.

Além de trocar dados entre a fonte de dados e os membros de dados de campo do conjunto de registros, o RFX gerencia os parâmetros de ligação. Quando o conjunto de registros é aberto, os membros de dados de parâmetro são vinculados na ordem do "?" espaços reservados na instrução SQL que CRecordset::Open construções. Para obter mais informações, consulte Recordset: Parametrização de um conjunto de registros (ODBC).

Substituir de sua classe de conjunto de registros de DoFieldExchange faz todo o trabalho, a movimentação de dados em ambas as direções. Como a troca de dados de caixa de diálogo (DDX), RFX precisa de informações sobre os membros de dados da sua classe. O assistente fornece as informações necessárias ao escrever uma implementação específica do conjunto de registros de DoFieldExchange , com base nos nomes de membros de dados de campo e tipos de dados que você especificar, com o assistente.

Processo de troca de campo do registro

Esta seção descreve a seqüência de eventos RFX como um objeto recordset é aberto e como adicionar, atualizar e excluir registros. A tabela Seqüência de RFX operações durante Recordset Open e a tabela Seqüência de RFX operações durante a rolagem neste tópico mostram o processo como processos RFX um Mover comando no conjunto de registros e como RFX gerencia uma atualização. Durante esses processos, DoFieldExchange é chamado para realizar diversas operações diferentes. O m_nOperation membro de dados da CFieldExchange objeto determina qual operação é solicitada. Talvez seja útil ler Recordset: Como os conjuntos de registros selecionar registros (ODBC) e Recordset: Como registros de atualização de conjuntos de registros (ODBC) antes de ler esse material.

RFX: Ligação inicial dos parâmetros e colunas

As seguintes atividades RFX ocorrerem, na ordem mostrada quando você chamar um objeto de conjunto de registros Abrir a função de membro:

  • Se o conjunto de registros tem membros de dados de parâmetro, o framework chama DoFieldExchange para acoplar os parâmetros para espaços reservados de parâmetro na string de instrução do SQL. conjunto de registros Uma representação de dependentes do tipo do valor do parâmetro é usada para cada espaço reservado de dados encontrados no Selecionar instrução. Isso ocorre após a instrução SQL é preparada, mas antes que ele seja executado. Para obter informações sobre a preparação de instrução, consulte o :: SQLPrepare a função no ODBC referência do programador.

  • As chamadas do framework DoFieldExchange uma segunda vez para ligar os valores das colunas selecionadas para membros de dados de campo correspondente no conjunto de registros. Isso estabelece o objeto recordset como um buffer de edição que contém as colunas do primeiro registro.

  • O recordset executa a instrução de SQL e a fonte de dados seleciona o primeiro registro. Colunas do registro são carregadas para membros de dados de campo do conjunto de registros.

A tabela a seguir mostra a seqüência de operações de RFX quando você abre um conjunto de registros.

Seqüência de operações de RFX durante o conjunto de registros aberto

A operação.

Operação de DoFieldExchange

Operação de banco de dados/SQL.

1. Abra o conjunto de registros.

 

 

 

2. Construir um demonstrativo de SQL.

 

 

 

3. Envie o SQL.

 

4. Vincule os membros de dados de parâmetro.

 

 

5. Vincule os membros de dados de campo para colunas.

 

 

 

6. ODBC oferece a movimentação e preenche os dados.

 

7. Corrigi os dados para C++.

 

Conjuntos de registros usam execução de preparada do ODBC para permitir a rápida repetir consulta com a mesma instrução de SQL. Para obter mais informações sobre a execução de preparado, consulte o SDK do ODBC referência do programador em que o Biblioteca MSDN.

RFX: Rolagem

Quando você rolar de um registro para outro, o framework chama DoFieldExchange para substituir os valores armazenados anteriormente nos membros de dados de campo com valores para o novo registro.

A tabela a seguir mostra a seqüência de operações de RFX quando o usuário move o registro para outro.

Seqüência de operações de RFX durante a rolagem

A operação.

Operação de DoFieldExchange

Operação de banco de dados/SQL.

1. Chame MoveNext ou um do outro mover funções.

 

 

 

 

2. ODBC oferece a movimentação e preenche os dados.

 

3. Corrigi os dados para C++.

 

RFX: Adição de novos registros e editar registros existentes

Se você adicionar um novo registro, o recordset opera como um buffer de edição para intensificar o conteúdo do novo registro. Com a adição de registros, editar registros envolve a alteração dos valores dos membros de dados de campo do conjunto de registros. Da perspectiva do RFX, a seqüência é:

  1. Sua chamada para o conjunto de registros AddNew ou Editar a função de membro faz com que o RFX armazenar o buffer de edição atual para possam ser restaurado mais tarde.

  2. AddNewou Editar prepara os campos no buffer de edição para RFX possa detectar os membros de dados de campo alterado.

    Como um novo registro não tem nenhum valores anteriores para comparar os novos com, AddNew define o valor de cada membro de dados de campo para um PSEUDO_NULL valor. Mais tarde, quando você chamar atualização, RFX compara o valor de cada membro dados com o PSEUDO_NULL valor. Se houver uma diferença, o membro de dados foi definido. (PSEUDO_NULL não é igual uma coluna de registro com um valor de verdadeiro Null nem qualquer desses igual C++ Nulo.)

    Diferentemente a atualização chamada para AddNew, o atualização pedir Editar compara os valores atualizados com os valores armazenados anteriormente em vez de usar PSEUDO_NULL. A diferença é que AddNew sem valores armazenados anteriormente para comparação.

  3. Definir diretamente os valores dos membros de dados do campo cujos valores você deseja editar ou que você deseja preencher para um novo registro. Isso pode incluir a chamada SetFieldNull.

  4. Sua chamada a atualização verifica para membros de dados de campo alterado, conforme descrito na etapa 2 (consulte a tabela Seqüência de RFX operações durante a rolagem). Se nenhum alterou, atualização retorna 0. Se tem alterado a alguns membros de dados de campo, atualização prepara e executa um SQL Inserir instrução que contém valores para todos os campos atualizados no registro.

  5. Para AddNew, atualização conclui restaurando os valores armazenados anteriormente do registro que era atual antes de AddNew chamada. Para Editar, os valores novos e editados permanecem no local.

A tabela a seguir mostra a seqüência de operações de RFX quando você adiciona um novo registro ou editar um registro existente.

Seqüência de operações de RFX durante AddNew e editar

A operação.

Operação de DoFieldExchange

Operação de banco de dados/SQL.

1. Call AddNew or Edit.

 

 

 

2. Fazer backup do buffer de edição.

 

 

3. Para AddNew, marcar os membros de dados do campo como "limpa" e nulo.

 

4. Atribua valores a membros de dados de campo do conjunto de registros.

 

 

5. Chame atualização.

 

 

 

6. Verifique se há campos alterados.

 

 

7. Criar SQL Inserir instrução para AddNew ou atualização a instrução para Editar.

 

 

 

8. Envie o SQL.

 

9. Para AddNew, restaurar o buffer de edição para o seu conteúdo de backup. Para Editar, excluir do backup.

 

RFX: A exclusão de registros existentes

Quando você exclui um registro, RFX define todos os campos Nulo como um lembrete de que o registro é excluído e você deve mover o logoff. Você não precisa de outras informações de seqüência RFX.

Consulte também

Tarefas

Adicionando um consumidor ODBC do MFC

Referência

Macros, Global Functions, and Global Variables

CFieldExchange Class

CRecordset::DoFieldExchange

Conceitos

Troca de campo do registro (RFX)