Compartilhar via


O conjunto de registros: Como AddNew, editar e excluir o trabalho (ODBC)

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

Este tópico explica como o AddNew, Editar, e Excluir funções de membro da classe CRecordset funciona. 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 no qual linha em massa buscando não foi implementada. Se você estiver usando a busca de linha em massa, consulte Recordset: Buscar registros em massa (ODBC).

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

Adicionando um registro

Adicionar um novo registro a um recordset envolve o conjunto de registros de chamada AddNew função de membro, a definição dos valores de membros de dados de campo do novo registro e chamando o atualização a função de membro para gravar o registro na fonte de dados.

Como uma pré-condição para chamada AddNew, o conjunto de registros 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 para que seu conteúdo possa ser restaurado se a operação foi cancelada.

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

Depois de chamar AddNew, o buffer de edição representa um registro novo, vazio, pronto para ser preenchido com valores. Para fazer isso, você 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 Null.

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

  • Se o seu driver ODBC oferece suporte a :: SQLSetPos função API ODBC, o 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, o MFC faz o seguinte:

    1. Se nenhuma alteração for detectada, atualização não faz nada e retornará 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 estão listadas na Inserir instrução. Para forçar uma coluna para ser incluído, chame o SetFieldDirty a 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 chamada é atual novamente independentemente se a Inserir instrução foi executada com êxito.

    Dica

    Para obter controle completo de um novo registro, abordagem: Defina os valores de todos os campos que possuem valores e definir explicitamente todos os campos que 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.

    Dica

    Para detectar quando os membros de dados do recordset altera 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 seja 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 estiverem visíveis, dependendo das duas coisas:

  • O driver que é capaz de.

  • O que a estrutura pode aproveitar.

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

Editar um registro existente

A edição de um registro existente em um conjunto de registros envolve a rolagem para o registro, o conjunto de registros de chamada Editar função de membro, a definição dos valores de membros de dados de campo do novo registro e chamando o atualização a função de membro para gravar o 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. Posteriormente, os valores do registro armazenados são usados para detectar se todos os campos foram alterados.

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

Dica

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 pode ficar vazio e o registro atual deve não ter sido excluído. IsBOF, IsEOF, e IsDeleted deve retornar 0.

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

  • Se o seu driver ODBC oferece suporte a :: SQLSetPos função API ODBC, o 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 forem 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, o MFC faz o seguinte:

    1. Se não houve nenhuma alteração, atualização não faz nada e retornará 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. Atualização 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: Executando 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. O registro editado permanece no lugar, como o registro atual.

    Aviso

    Quando você se prepara para atualizar um conjunto de registros chamando atualização, tome cuidado com o que o seu conjunto de registros inclui todas as colunas que compõe a chave primária da tabela (ou todas as colunas de qualquer índice exclusivo na tabela ou colunas suficientes) para identificar com exclusividade a linha. Em alguns casos, a estrutura pode usar somente as colunas selecionadas no seu conjunto de registros para identificar qual registro na tabela a ser atualizada. 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.

    Dica

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

Excluir um registro

Excluir um registro de um conjunto de registros envolve a rolagem para o registro e o conjunto de registros de chamada Excluir a 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 o seu driver ODBC oferece suporte a :: SQLSetPos função API ODBC, o MFC usa a função para excluir o registro na fonte de dados. Usando :: SQLSetPos é geralmente mais eficiente do que usando o SQL.

    - ou -

  • Se :: SQLSetPos não pode ser usado, o 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 como em AddNew e Editar.

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

    4. Os valores do registro excluído ainda estão em membros de dados de campo do conjunto de registros, mas os membros de dados do campo marcado como nulos e o conjunto de registros IsDeleted a 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 os novos dados do registro. É um erro ao chamar Excluir novamente ou para 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

O conjunto de registros (ODBC)

O conjunto de registros: Mais sobre as atualizações (ODBC)

Troca de campo do registro (RFX)