conjunto de registros: Mais informações sobre atualizações (ODBC)
Este tópico se aplica a classes MFC ODBC.
Este tópico explica:
sistema autônomo Outros operações, sistema autônomo transações, afetam atualizações.
As atualizações e as de outros usuários.
Mais informações sobre funções de membro atualização e excluir.
Observação: |
---|
Este tópico se aplica aos objetos derivados CRecordset em qual linha em massa a busca não foi implementada. Se você implementou a busca de linha em massa, algumas das informações não se aplica.Por exemplo, você não pode chamar o AddNew, edição, Excluir, and Atualizaçãofunções de membro ; Entretanto, você pode realizar transações.Para obter mais informações sobre buscar a linha em massa, consulte conjunto de registros: Busca de 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 rolagem antes de concluir uma transação.
Como transações afetam atualizações
Além das noções básicas sobre como AddNew, edição, and Excluir trabalho, é importante entender como a BeginTrans, CommitTrans, and Reversão funções de membro de CDatabase funcionam com as funções de atualização de CRecordset.
Por padrão, telefonar s para AddNew e edição afetam a fonte de dados imediatamente quando você telefonar 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é confirmá-las.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 fechar conjunto de registros afeta atualizações
Se você fechar um conjunto de registros ou suas associadas CDatabase 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 o back-end de banco de dados é o mecanismo de banco de dados Microsoft Jet) de volta.
Cuidado: |
---|
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 resulta em liberar qualquer uma das linhas que foram modificadas ou bloqueios que foram colocados até que a transação explícita é confirmada ou revertida.I t é recomendável que você sempre tanto em aberto e fechar conjuntos de registros dentro ou fora de uma transação explícita do Jet. |
Como a rolagem afeta atualizações
Quando conjunto de registros: Rolagem (ODBC) em um conjunto de registros, buffer de edição é preenchido com cada novo registro corrente (o registro anterior não é armazenado pela primeira vez). Rolagem pula sobre registros excluídos anteriormente.Se você rolar depois um AddNew ou Editar telefonar sem chamar Atualização, CommitTrans, or Reversão primeiro, todas sistema autônomo alterações serão perdidas (sem nenhum aviso a você) sistema autônomo um novo registro é colocado no buffer de edição.Buffer de edição é preenchido com o registro rolado para, o registro armazenado é liberado e nenhuma alterar ocorre na fonte de dados.Isso se aplica a ambos os AddNew e edição.
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 o ciclo de vida de seu conjunto de registros afetá-lo.
Em um ambiente multiusuário, outros usuários podem em em aberto conjuntos de registros que contenham alguns os 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.Pois dynasets recuperar um registro time Role a ele, dynasets refletir as alterações cada time rolar para um registro.Instantâneos de recuperar um registro na primeira vez que você rolar, para que snapshots reflitam somente as alterações que ocorrem antes que você rolar para o registro inicialmente.
Registros adicionados por outros usuários depois de em aberto o conjunto de registros não aparecem no seu conjunto de registros, a menos que você repetir consulta.Se seu conjunto de registros for um dynaset, editar registros existentes por outros usuários exibidas no seu tipo dynaset quando você rolar para o registro afetado.Se seu conjunto de registros é um instantâneo, edições não mostrar até que você repetir consulta o snapshot.Se você quiser ver registros adicionados ou excluídos por outros usuários no instantâneo ou registros adicionados por outros usuários na sua dynaset telefonar CRecordset::RepetirConsulta para recriar o conjunto de registros. (Observe que as exclusões de outros usuários aparecerão em seu tipo dynaset.) Você também pode telefonar Repetir a consulta para ver os registros que você adicionar, mas não para ver as exclusões.
Dica: |
---|
Para forçar o cache de todo um snapshot ao mesmo tempo, telefonar MoveLast imediatamente depois que você abre o instantâneo. Em seguida, chame MoveFirst começar a trabalhar com os registros.MoveLast equivale a rolagem sobre todos os registros, mas ele recupera-los ao mesmo tempo. Observe, entretanto, que isso pode reduzir o desempenho e não pode ser necessário para alguns drivers. |
Os efeitos de suas atualizações em outros usuários são semelhantes aos seus efeitos sobre você.
Mais informações sobre o atualização e excluir
Esta seção fornece informações adicionais para ajudar você a trabalhar com Atualização and Excluir.
Atualização de sucesso e falha
If Atualização tiver êxito, a AddNew ou edição modo termina.Para iniciar um AddNew ou edição modo de telefonar novamente,AddNew ou edição.
If Atualização falhar (retorna FALSE ou lança uma exceção), permanecem em AddNew ou edição modo, dependendo de qual função você chamado pela última vez.Em seguida, adote um destes procedimentos:
Modifique um membro de campo de dados e tente a Atualização novamente.
De telefonarAddNew Para reiniciar os membros de dados do campo como nulo, defina os valores dos membros de dados de campo e, em seguida, chame Atualização novamente.
De telefonaredição para recarregar os valores que estavam no conjunto de registros antes da primeira telefonar para AddNew ou edição, defina os valores dos membros de dados de campo e depois chamar Atualização novamente.Após um bem-sucedida Atualização telefonar (exceto após um AddNew chamar), os membros de dados do campo retêm seus valores novos.
De telefonarMover (incluindo Mover com um parâmetro de AFX_MOVE_REFRESHou 0), que libera quaisquer alterações e termina qualquer AddNew ou edição modo em vigor.
atualização e excluir
Esta seção se aplica a ambos os Atualização and Excluir.
Em um Atualização or Excluir operação, somente um registro deve ser atualizado.Esse registro é o registro corrente, 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 uma do seguinte RETCODE valores:
AFX_SQL_ERROR_NO_ROWS_AFFECTED
AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED
Quando essas exceções são lançadas, você permanecer no AddNew ou edição estado que estava quando chamado Atualização or Excluir.Aqui estão os cenários mais comuns em que você vê essas exceções.Você provavelmente consulte:
AFX_SQL_ERROR_NO_ROWS_AFFECTED quando estiver usando um modo de bloqueio otimista e outro usuário modificou o registro de uma maneira que impede 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 tem colunas suficientes no conjunto de registros para identificar exclusivamente uma linha da tabela.
Consulte também
Conceitos
conjunto de registros: Como Recordsets selecionar registros (ODBC)