Partilhar via


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

Este tópico se aplica a classes MFC ODBC.

Este tópico explica:

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

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

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

ObservaçãoObservação

Este tópico se aplica aos objetos derivados de CRecordset em qual linha em massa buscando não foi implementada.Se tiver implementado em massa linha buscando, 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 Recordset: 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.

ecc2bf09.collapse_all(pt-br,VS.110).gifComo transações afetam atualizações

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

Por padrão, chamadas de AddNew e Editar afetam a fonte de dados imediatamente quando você chamar atualização.Excluir chamadas têm efeito 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).

ecc2bf09.collapse_all(pt-br,VS.110).gifComo fechar o Recordset afeta atualizações

Se você fechar um conjunto de registros ou seu associado CDatabase objeto com uma transação em andamento (você não chamou CDatabase::CommitTrans ou CDatabase::Rollback), a transação é revertida automaticamente (a menos que seu backend de banco de dados Microsoft Jet database engine) de volta.

Observação de cuidadoCuidado

Se você estiver usando o mecanismo de banco de dados Microsoft Jet, fechar 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 tanto abrir e fechar conjuntos de registros dentro ou fora de uma transação explícita do Jet.

ecc2bf09.collapse_all(pt-br,VS.110).gifComo a rolagem afeta atualizações

Quando você Recordset: Rolagem (ODBC) em um recordset, buffer de edição é preenchido com cada novo registro atual (o registro anterior não é armazenado pela primeira vez).Rolagem ignora registros excluídos anteriormente.Se você rolar após um AddNew ou Editar chamada sem chamada atualização, CommitTrans, ou reversão primeiro, as alterações serão perdidas (sem nenhum aviso a você) como um novo registro é colocado no buffer de edição.O buffer de editar é 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 afetam você.

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

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

DicaDica

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

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

Mais informações sobre atualização e exclusão

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

ecc2bf09.collapse_all(pt-br,VS.110).gifAtualização de sucesso e falha

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

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

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

  • Chamar AddNew para redefinir os membros de dados de campo para Null, defina os valores dos membros de dados de campo e chame atualização novamente.

  • Chamar Editar para recarregar os valores que estavam no conjunto de registros antes da primeira chamada para AddNew ou Editar, definir 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 de chamada), os membros de dados do campo mantêm seus novos valores.

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

ecc2bf09.collapse_all(pt-br,VS.110).gifAtualizar 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, 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 contendo 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ê permanecer na AddNew ou Editar estado estavam quando você chamado atualização ou Excluir.Aqui estão os cenários mais comuns em que você vê essas exceções.Você está mais acostumado a 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 identificando o registro correto para atualizar ou excluir.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED quando a tabela 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 exclusivamente uma linha da tabela.

Consulte também

Conceitos

Conjunto de registros (ODBC)

Recordset: Como conjuntos de registros selecionar registros (ODBC)

Registro campo Exchange (RFX)

SQL

Exceções: Exceções de banco de dados