Compartilhar via


Recordset: Como AddNew, editar e excluir trabalho (ODBC)

Este tópico se aplica a classes MFC ODBC.

Este tópico explica como o AddNew, Editar, e Excluir funções de membro da classe CRecordset trabalhar.Os tópicos abordados incluem:

  • Como funciona a adição de registros

  • Visibilidade dos registros adicionados

  • Como funciona a edição de registros

  • Como funciona a exclusão de registros

ObservaçãoObservação

Este tópico se aplica aos objetos derivados de CRecordset em qual linha em massa buscando não foi implementada.Se você estiver usando em massa linha buscando, consulte Recordset: buscar registros em massa (ODBC).

Como um suplemento, você talvez queira ler registro de campo Exchange: como funciona RFX, que descreve a função correspondente do RFX em operações de atualização.

Adicionando um registro

Adicionar um novo registro a um recordset envolve chamar o conjunto de registros AddNew função de membro, definindo os valores dos membros de dados de campo do novo registro e chamar o atualização função de membro para gravar o registro da fonte de dados.

Como uma pré-condição para chamada AddNew, o recordset deve não ter sido aberto como somente leitura.O CanUpdate e CanAppend funções de membro permitem determinar essas condições.

Quando você chamar AddNew:

  • O registro no buffer de edição é armazenado, seu conteúdo pode ser restaurado se a operação foi cancelada.

  • Os membros de dados de campo são sinalizados para que seja possível detectar alterações neles mais tarde.Os dados de campo membros são marcados também limpar (inalterada) e definido como nulo.

Depois de chamar AddNew, representa um novo buffer de edição, esvaziar o registro, pronto para ser preenchida com valores.Para fazer isso, definir manualmente os valores, atribuindo a eles.Em vez de especificar um valor para um campo de dados reais, você pode chamar SetFieldNull para especificar o valor nulo.

Para confirmar as alterações, você chamar atualização.Quando você chamar atualização para o novo registro:

  • Se seu driver ODBC oferece suporte a :: SQLSetPos função de API de ODBC do MFC usa a função para adicionar o registro na fonte de dados.Com :: SQLSetPos, MFC pode adicionar um registro com mais eficiência porque não tem que construir e processar uma instrução SQL.

  • Se :: SQLSetPos não pode ser usado, MFC faz o seguinte:

    1. Se nenhuma alteração for detectada, atualização não faz nada e retorna 0.

    2. Se houver alterações, atualização constrói uma SQL Inserir instrução.As colunas representadas por todos os membros de dados de campo sujo são listadas na Inserir instrução.Para forçar uma coluna seja incluída, chamar o SetFieldDirty função de membro:

      SetFieldDirty( &m_dataMember, TRUE );
      
    3. Atualização confirma o novo registro — o Inserir instrução é executada e o registro está comprometido com a tabela na fonte de dados (e o conjunto de registros, se não um instantâneo), a menos que uma transação está em andamento.

    4. O registro armazenado é restaurado para o buffer de edição.O registro que era atual antes de AddNew é a chamada atual novamente independentemente se o Inserir instrução foi executada com êxito.

    DicaDica

    Para obter controle completo de um novo registro, usar a seguinte abordagem: definir os valores dos campos que têm valores e definir explicitamente os campos permanecerão nulo chamando SetFieldNull com um ponteiro para o campo e o parâmetro TRUE (padrão).Se você deseja garantir que um campo não é gravado para a fonte de dados chamada SetFieldDirty com um ponteiro para o campo e o parâmetro FALSEe não modifique o valor do campo.Para determinar se um campo pode ser Null, chame IsFieldNullable.

    DicaDica

    Para detectar quando os membros de dados do recordset alterar o valor, o MFC usa um PSEUDO_NULL valor apropriado para cada tipo de dados que você pode armazenar em um conjunto de registros.Se você deve definir explicitamente um campo o PSEUDO_NULL valor e o campo já acontece para ser marcado como Null, você também deve chamar SetFieldNull, passando o endereço do campo no primeiro parâmetro e FALSE no segundo parâmetro.

Visibilidade dos registros adicionados

Quando um registro adicionado é visível para o conjunto de registros?Registros adicionados às vezes aparecem e algumas vezes não são visíveis, dependendo de duas coisas:

  • O driver que é capaz de.

  • O que o framework pode aproveitar.

Se seu driver ODBC oferece suporte a :: SQLSetPos função de API de ODBC do MFC usa a função para adicionar registros.Com :: SQLSetPos, adicionados registros são visíveis para qualquer recordset atualizável do MFC.Sem suporte para a função, adicionados registros não são visíveis e você deve chamar Requery para vê-las.Usando :: SQLSetPos também é mais eficiente.

Editar um registro existente

Editar um registro existente em um conjunto de registros envolve a rolagem para o registro, chamar o conjunto de registros Editar função de membro, definindo os valores dos membros de dados de campo do novo registro e chamar o atualização função de membro para gravar registro alterado na fonte de dados.

Como uma pré-condição para chamada Editar, o conjunto de registros deve ser atualizável e um registro.O CanUpdate e IsDeleted funções de membro permitem determinar essas condições.O registro atual também deve não já ter sido excluído e deve haver registros no conjunto de registros (ambos IsBOF e IsEOF retornar 0).

Quando você chamar Editar, o registro no buffer de edição (o registro atual) é armazenado.Valores do registro armazenados são posteriormente usadas para detectar se todos os campos foram alterados.

Depois de chamar Editar, buffer de edição ainda representa o registro atual, mas agora está pronto para aceitar alterações em membros de dados de campo.Para alterar o registro, defina manualmente os valores de quaisquer membros de dados de campo que deseja editar.Em vez de especificar um valor para um campo de dados reais, você pode chamar SetFieldNull para especificar o valor nulo.Para confirmar as alterações, chame atualização.

DicaDica

Para sair do AddNew ou Editar modo, chamada Mover com o parâmetro AFX_MOVE_REFRESH.

Como uma pré-condição para chamada atualização, o conjunto de registros não deve estar vazio e o registro atual deve não ter sido excluído.IsBOF, IsEOF, e IsDeleted tudo deve retornar 0.

Quando você chamar atualização para o registro editado:

  • Se seu driver ODBC oferece suporte a :: SQLSetPos função de API de ODBC do MFC usa a função para atualizar o registro na fonte de dados.Com :: SQLSetPos, o driver compara seu buffer de edição com o registro correspondente no servidor, atualizando o registro no servidor se os dois são diferentes.Com :: SQLSetPos, MFC pode atualizar um registro com mais eficiência porque não tem que construir e processar uma instrução SQL.

    -  ou  -

  • Se :: SQLSetPos não pode ser usado, MFC faz o seguinte:

    1. Se não houver nenhuma alteração atualização não faz nada e retorna 0.

    2. Se houver alterações, atualização constrói uma SQL atualização instrução.As colunas listadas na atualização instrução baseiam-se os membros de dados de campo que foram alterados.

    3. Atualizar confirma as alterações — executa o atualização instrução — e o registro é alterado na fonte de dados, mas não confirmada se uma transação está em andamento (consulte transação: executar uma transação em um conjunto de registros (ODBC) para obter informações sobre como a transação afeta a atualização).ODBC mantém uma cópia do registro também muda.

    4. Ao contrário do processo de AddNew, o Editar processo não restaura o registro armazenado.Registro editado permanece no lugar como o registro atual.

    Observação de cuidadoCuidado

    Quando você se preparar para atualizar um conjunto de registros chamando atualização, tome cuidado que seu conjunto de registros inclui todas as colunas que compõem a chave primária da tabela (ou todas as colunas de qualquer índice exclusivo na tabela ou colunas suficientes) para identificar exclusivamente a linha.Em alguns casos, a estrutura pode usar somente as colunas selecionadas de registros para identificar o registro na tabela para atualizar.Sem todas as colunas necessárias, vários registros podem ser atualizados na tabela.Nesse caso, o framework lança exceções ao chamar atualização.

    DicaDica

    Se você chamar AddNew ou Editar após ter chamado qualquer função anteriormente, mas antes de chamar atualização, buffer de edição é atualizado com o registro armazenado, substituindo o registro novo ou editado em andamento.Esse comportamento fornece uma maneira de anular uma AddNew ou Editar e começar um novo: se você determinar que o registro em andamento está com defeito, basta chamar Editar ou AddNew novamente.

Excluir um registro

Excluir um registro de um conjunto de registros envolve a rolagem para o registro e chamar o conjunto de registros Excluir função de membro.Ao contrário de AddNew e Editar, Excluir não requer uma chamada correspondente para atualização.

Como uma pré-condição para chamada Excluir, o conjunto de registros deve ser atualizável e deve estar em um registro.O CanUpdate, IsBOF, IsEOF, e IsDeleted funções de membro permitem determinar essas condições.

Quando você chamar Excluir:

  • Se seu driver ODBC oferece suporte a :: SQLSetPos função de API de ODBC do MFC usa a função para excluir o registro na fonte de dados.Usando :: SQLSetPos é geralmente mais eficiente do que usando SQL.

    -  ou  -

  • Se :: SQLSetPos não pode ser usado, MFC faz o seguinte:

    1. O registro atual no buffer de edição não é feito como em AddNew e Editar.

    2. Excluir constrói uma SQL Excluir instrução que remove o registro.

      O registro atual no buffer de edição não é armazenado em AddNew e Editar.

    3. Excluir confirma a exclusão — executa o Excluir instrução.O registro é marcado excluído da fonte de dados e o registro é um instantâneo, no ODBC.

    4. Valores do registro excluído ainda estão em membros de dados de campo do conjunto de registros, mas os membros de dados de campo são marcados nulo e o conjunto de registros IsDeleted função de membro retorna um valor diferente de zero.

    ObservaçãoObservação

    Depois de excluir um registro, você deve rolar para outro registro para reabastecer o buffer de edição com dados do novo registro.É um erro ao chamar Excluir novamente ou chamar Editar.

Para obter informações sobre as declarações de SQL usados em operações de atualização, consulte SQL.

Consulte também

Conceitos

Conjunto de registros (ODBC)

Conjunto de registros: Mais sobre atualizações (ODBC)

Registro campo Exchange (RFX)