Partilhar via


Conjunto de registros: adicionando, atualizando e excluindo registros (ODBC)

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

Observação

Agora você pode adicionar registros em massa com mais eficiência. Para obter mais informações, confira Conjunto de registros: adicionando registros em massa (ODBC).

Observação

Este tópico aplica-se a objetos derivados de CRecordset nos quais o fetch de linha em massa não foi implementado. Se você estiver usando busca de linhas em massa, confira Conjunto de registros: buscando registros em massa (ODBC).

Instantâneos e dynasets atualizáveis permitem que você adicione, edite (atualize) e exclua registros. Este tópico explica:

Para obter mais informações sobre como as atualizações são realizadas e como suas atualizações aparecem para outros usuários, confira Conjunto de registros: como os conjuntos de registros atualizam os registros (ODBC). Normalmente, quando você adiciona, edita ou exclui um registro, o conjunto de registros altera a fonte de dados imediatamente. Em vez disso, você pode agrupar grupos de atualizações relacionadas em transações. Se uma transação estiver em andamento, a atualização não se tornará final até que você confirme a transação. Isso permite que você retome ou reverta as alterações. Para obter mais informações sobre transações, confira Transação (ODBC).

A tabela a seguir resume as opções disponíveis para conjuntos de registros com diferentes características de atualização.

Opções de leitura/atualização do conjunto de registros

Tipo Ler Editar registro Excluir registro Adicionar novo (acréscimo)
Somente leitura N N N N
Somente acréscimo N N N S
Totalmente atualizável N N N S

Determinar se o conjunto de registros é atualizável

Um objeto de conjunto de registros é atualizável se a fonte de dados for atualizável e você abriu o conjunto de registros como atualizável. Sua capacidade de atualização também depende da instrução SQL que você usa, dos recursos do driver ODBC e se a Biblioteca de Cursores ODBC está na memória. Você não pode atualizar um conjunto de registros ou fonte de dados somente leitura.

Para determinar se o conjunto de registros é atualizável

  1. Chame a função de membro CanUpdate do objeto de conjunto de registros.

    CanUpdate retorna um valor diferente de zero se o conjunto de registros for atualizável.

Por padrão, os conjuntos de registros são totalmente atualizáveis (você pode executar as operações AddNew, Edit e Delete). Mas você também pode usar a opção appendOnly para abrir conjuntos de registros atualizáveis. Um conjunto de registros aberto dessa forma permite apenas a adição de novos registros com AddNew. Você não pode editar ou excluir registros existentes. Você pode testar se um conjunto de registros está aberto apenas para anexação chamando a função de membro CanAppend. CanAppend retorna um valor diferente de zero se o conjunto de registros for totalmente atualizável ou aberto apenas para anexação.

O código a seguir mostra como você pode usar CanUpdate para um objeto de conjunto de registros chamado rsStudentSet:

if( !rsStudentSet.Open( ) )
    return FALSE;
if( !rsStudentSet.CanUpdate( ) )
{
    AfxMessageBox( "Unable to update the Student recordset." );
    return;
}

Cuidado

Ao se preparar para atualizar um conjunto de registros chamando Update, assegure-se de que seu conjunto de registros inclua todas as colunas que compõem a chave primária da tabela (ou todas as colunas de qualquer índice exclusivo na tabela). Em alguns casos, a estrutura pode usar apenas as colunas selecionadas em seu conjunto de registros para identificar qual registro em sua tabela deverá ser atualizado. Sem todas as colunas necessárias, vários registros podem ser atualizados na tabela, possivelmente prejudicando a integridade referencial da tabela. Nesse caso, a estrutura gera exceções quando você chama Update.

Adicionar um registro a um conjunto de registros

Você pode adicionar novos registros a um conjunto de registros se sua função de membro CanAppend retornar um valor diferente de zero.

Para adicionar um novo registro a um conjunto de registros

  1. Verifique se o conjunto de registros é anexável.

  2. Chame a função de membro Adicionar Novo do objeto de conjunto de registros.

    AddNew prepara o conjunto de registros para atuar como um buffer de edição. Todos os membros de dados de campo são definidos com o valor especial Null e marcados como inalterados, portanto, apenas os valores alterados (sujos) são gravados na fonte de dados quando você chama Atualizar.

  3. Defina os valores dos membros de dados de campo do novo registro.

    Atribua valores aos membros de dados de campo. Aqueles que você não atribuir não serão gravados na fonte de dados.

  4. Chame a função de membro Update do objeto de conjunto de registros.

    Update conclui a adição gravando o novo registro na fonte de dados. Para obter informações sobre o que acontece se você não chamar Update, confira Conjunto de registros: como os conjuntos de registros atualizam os registros (ODBC).

Para obter informações sobre como a adição de registros funciona e sobre quando os registros adicionados estão visíveis em seu conjunto de registros, confira Conjunto de registros: como adicionar novos, editar e excluir trabalhos.

O exemplo a seguir mostra como adicionar um novo registro:

if( !rsStudent.Open( ) )
    return FALSE;
if( !rsStudent.CanAppend( ) )
    return FALSE;                      // no field values were set
rsStudent.AddNew( );
rsStudent.m_strName = strName;
rsStudent.m_strCity = strCity;
rsStudent.m_strStreet = strStreet;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not added; no field values were set." );
    return FALSE;
}

Dica

Para cancelar uma chamada AddNew ou Edit, basta fazer outra chamada para AddNew ou Edit ou chamar Move com o parâmetro AFX_MOVE_REFRESH. Os membros de dados são redefinidos para seus valores anteriores e você ainda está no modo Edit ou Add.

Editar um registro em um conjunto de registros

Você poderá editar registros existentes se a função de membro CanUpdate do conjunto de registros retornar um valor diferente de zero.

Para editar um registro existente em um conjunto de registros

  1. Verifique se o conjunto de registros está atualizável.

  2. Role até o registro que você deseja atualizar.

  3. Chame a função de membro Editar do objeto de conjunto de registros.

    Edit prepara o conjunto de registros para atuar como um buffer de edição. Todos os membros de dados de campo são marcados para que o conjunto de registros possa informar posteriormente se eles foram alterados. Os novos valores para membros de dados de campo alterados são gravados na fonte de dados quando você chama Atualizar.

  4. Defina os valores dos membros de dados de campo do novo registro.

    Atribua valores aos membros de dados de campo. Aqueles que você não atribuir valores permanecem inalterados.

  5. Chame a função de membro Update do objeto de conjunto de registros.

    Update conclui a edição escrevendo o registro alterado na fonte de dados. Para obter informações sobre o que acontece se você não chamar Update, confira Conjunto de registros: como os conjuntos de registros atualizam os registros (ODBC).

Depois de editar um registro, o registro editado continuará sendo o registro atual.

O exemplo a seguir mostra uma operação Edit. Ele pressupõe que o usuário tenha mudado para um registro que deseja editar.

rsStudent.Edit( );
rsStudent.m_strStreet = strNewStreet;
rsStudent.m_strCity = strNewCity;
rsStudent.m_strState = strNewState;
rsStudent.m_strPostalCode = strNewPostalCode;
if( !rsStudent.Update( ) )
{
    AfxMessageBox( "Record not updated; no field values were set." );
    return FALSE;
}

Dica

Para cancelar uma chamada AddNew ou Edit, basta fazer outra chamada para AddNew ou Edit ou chamar Move com o parâmetro AFX_MOVE_REFRESH. Os membros de dados são redefinidos para seus valores anteriores e você ainda está no modo Edit ou Add.

Excluir um registro de um conjunto de registros

Você poderá excluir registros se a função de membro CanUpdate do conjunto de registros retornar um valor diferente de zero.

Para excluir um registro

  1. Verifique se o conjunto de registros está atualizável.

  2. Role até o registro que você deseja atualizar.

  3. Chame a função de membro Excluir do objeto de conjunto de registros.

    Delete marca imediatamente o registro como excluído, tanto no conjunto de registros quanto na fonte de dados.

    Ao contrário AddNew e Edit, Delete não tem nenhuma chamada correspondente Update.

  4. Role para outro registro.

    Observação

    Ao percorrer o conjunto de registros, os registros excluídos podem não ser ignorados. Para obter mais informações, confira a função de membro IsDeleted.

O exemplo a seguir mostra uma operação Delete. Ele pressupõe que o usuário mudou para um registro que deseja excluir. Depois que Delete é chamado, é importante se mover para um novo registro.

rsStudent.Delete( );
rsStudent.MoveNext( );

Para obter mais informações sobre os efeitos das funções de membro AddNew, Edit e Delete, confiraConjunto de registros: como os conjuntos de registros atualizam os registros (ODBC).

Confira também

Conjunto de registros (ODBC)
Conjunto de registros: bloqueando registros (ODBC)