Compartilhar via


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

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

Este tópico explica:

  • Como outras operações, como, por exemplo, transações, afetam atualizações.

  • As atualizações e os de outros usuários.

  • Mais sobre as funções de membro Update e Delete.

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ê implementou a busca de linha em massa, algumas informações não se aplica. Por exemplo, você não pode chamar o AddNew, Editar, Excluir, e atualização funções de membro; No entanto, você pode realizar transações. Para obter mais informações sobre a busca de linha em massa, consulte O conjunto de registros: Buscar registros em massa (ODBC).

Como outras operações afetam atualizações

As atualizações são afetadas por transações em vigor no momento da atualização, fechando o conjunto de registros antes de concluir uma transação e rolando antes de concluir uma transação.

Como transações afetam atualizações

Além das noções básicas sobre como AddNew, Editar, e Excluir o trabalho, é importante entender como o BeginTrans, CommitTrans, e reversão funções de membro da incorporadas trabalha com as funções de atualização do CRecordset.

Por padrão, chamadas de AddNew e Editar afetam a fonte de dados imediatamente ao chamar atualização. Excluir chamadas entram em vigor imediatamente. Mas você pode estabelecer uma transação e executar um lote de tais chamadas. As atualizações não são permanentes até que você as confirme. Se você mudar de idéia, você pode reverter a transação em vez de confirmá-lo.

Para obter mais informações sobre transações, consulte Transação (ODBC).

Como o conjunto de registros de fechamento afeta atualizações

Se você fechar um conjunto de registros ou seu associado CDatabase o objeto, com uma transação em andamento (você não tiver chamado CDatabase::CommitTrans ou CDatabase::Rollback), a transação é revertida automaticamente (a menos que seu back-end do banco de dados é o mecanismo de banco de dados Microsoft Jet) de volta.

Aviso

Se você estiver usando o mecanismo de banco de dados Microsoft Jet, o fechamento de um conjunto de registros dentro de uma transação explícita não resultar em liberar qualquer uma das linhas que foram modificadas ou bloqueios que foram colocados até que a transação explícita é confirmada ou revertida. É recomendável que você sempre abertas e fechar recordsets dentro ou fora de uma transação explícita do Jet.

Como a rolagem afeta atualizações

Quando você O conjunto de registros: Rolagem (ODBC) em um conjunto de registros, o buffer de edição é preenchido com cada novo registro atual (o registro anterior não é armazenado pela primeira vez). Rolagem ignora os registros excluídos anteriormente. Se você rolar após um AddNew ou Editar chamada sem chamada atualização, CommitTrans, ou reversão em primeiro lugar, as alterações serão perdidas (com nenhum aviso a você) como um novo registro é colocado no buffer de edição. O buffer de edição é preenchido com o registro rolado para o registro armazenado é liberado e nenhuma alteração ocorre na fonte de dados. Isso se aplica a ambos AddNew e Editar.

As atualizações e as atualizações de outros usuários.

Quando você usa um conjunto de registros para atualizar os dados, as atualizações afetam outros usuários. Da mesma forma, as atualizações de outros usuários durante a vida útil de seu conjunto de registros afetarão-lo.

Em um ambiente multiusuário, outros usuários podem abrir conjuntos de registros que contêm alguns dos mesmos registros que você selecionou no seu conjunto de registros. As alterações em um registro antes de recuperá-lo são refletidas no seu conjunto de registros. Porque dynasets recuperar um registro de cada vez que você rolar a ele, dynasets refletir as alterações cada vez que você rolar para um registro. Instantâneos de recuperar um registro na primeira vez que você rolar a ele, para que os instantâneos refletem somente as alterações que ocorrem antes que você rolar para o registro inicialmente.

Registros adicionados por outros usuários depois de abrir o conjunto de registros não mostram no seu conjunto de registros, a menos que você repetir a consulta. Se o seu conjunto de registros é um dynaset, edições de registros existentes por outros usuários aparecerão em seu dynaset ao rolar para o registro afetado. Se o seu conjunto de registros é um instantâneo, edições não mostram até que você repetir consulta o snapshot. Se você quiser ver os registros adicionados ou excluídos por outros usuários no snapshot ou registros adicionados por outros usuários no seu dynaset, chamada CRecordset::Requery para recriar o conjunto de registros. (Observe que as exclusões de outros usuários aparecerão na sua dynaset). Você também pode chamar Requery para ver os registros de adicionar, mas não para ver suas exclusões.

Dica

Para forçar o cache de todo um snapshot ao mesmo tempo, chame MoveLast imediatamente após abrir o instantâneo. Em seguida, chame MoveFirst para começar a trabalhar com os registros. MoveLasté equivalente à rolagem sobre todos os registros, mas recuperá-los ao mesmo tempo. No entanto, observe que isso pode reduzir o desempenho e não pode ser necessário para alguns drivers.

Os efeitos das suas atualizações em outros usuários são semelhantes de seus efeitos sobre você.

Mais informações sobre o Update e Delete

Esta seção fornece informações adicionais para ajudá-lo a trabalhar com atualização e Excluir.

Atualização de sucesso e falha

Se atualização for bem-sucedida, o AddNew ou Editar modo extremidades. Para iniciar um AddNew ou Editar modo novamente, a chamada AddNew ou Editar.

Se atualização falhar (retorna FALSE ou lança uma exceção), você permanecer na AddNew ou Editar modo, dependendo de qual função chamado pela última vez. Você pode fazer o seguinte:

  • Modificar um membro de dados de campo e tente a atualização novamente.

  • Chame AddNew para redefinir os membros de dados de campo para Null, defina os valores dos membros de dados do campo e então chamar atualização novamente.

  • Chame Editar para recarregar os valores que estavam no conjunto de registros antes da primeira chamada para AddNew ou Editar, defina os valores dos membros de dados de campo e, em seguida, chamar atualização novamente. Após um bem-sucedido atualização chamada (exceto após um AddNew call), os membros de dados do campo retém seus novos valores.

  • Chame Mover (incluindo Mover com um parâmetro de AFX_MOVE_REFRESH, ou 0), que libera quaisquer alterações e termina a qualquer AddNew ou Editar modo em vigor.

Atualizar e excluir

Esta seção se aplica a ambos atualização e Excluir.

Em um atualização ou Excluir operação, apenas um registro deve ser atualizado. Esse registro é o registro atual, o que corresponde aos valores de dados nos campos do conjunto de registros. Se por algum motivo registros não são afetados ou mais de um registro é afetado, uma exceção é lançada a que contém um dos seguintes RETCODE valores:

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED

Quando essas exceções são lançadas, você pode permanecer no AddNew ou Editar estado em que estava quando você chamou atualização ou Excluir. Aqui estão os cenários mais comuns que você veria essas exceções. Provavelmente você ver:

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED quando você estiver usando o modo de bloqueio otimista e outro usuário modificou o registro de uma maneira que impede que a estrutura identifica o registro correto para atualizar ou excluir.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED quando a tabela que você está atualizando não tem nenhuma chave primária ou índice exclusivo e você não tenha colunas suficientes no conjunto de registros para identificar com exclusividade uma linha da tabela.

Consulte também

Conceitos

O conjunto de registros (ODBC)

O conjunto de registros: Como os conjuntos de registros selecionar registros (ODBC)

Troca de campo do registro (RFX)

SQL

Exceptions: Database Exceptions