Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico se aplica às classes ODBC do MFC.
Observação
Agora você pode adicionar registros em massa de forma mais eficiente. Para obter mais informações, consulte Recordset: Adicionando registros em massa (ODBC).
Observação
Este tópico aplica-se a objetos derivados de CRecordset nos quais a busca de linhas em massa não foi implementada. Se você estiver usando a busca de linha em massa, consulte Recordset: Buscando registros em massa (ODBC).
Instantâneos e dynasets atualizáveis permitem adicionar, editar (atualizar) e excluir registros. Este tópico explica:
Para obter mais informações sobre como as atualizações são realizadas e como as atualizações aparecem para outros usuários, consulte Recordset: How Recordsets Update Records (ODBC). Normalmente, quando você adiciona, edita ou exclui um registro, o conjunto de registros altera a fonte de dados imediatamente. Em vez disso, pode reunir um conjunto 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ê recupere ou reverta as alterações. Para obter informações sobre transações, consulte 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 | Leitura | Editar registo | Eliminar registo | Adicionar novo (acrescentar) |
|---|---|---|---|---|
| Somente leitura | Y | N | N | N |
| Somente apêndice | Y | N | N | Y |
| Totalmente atualizável | Y | Y | Y | Y |
Determinando se seu conjunto de registros é atualizável
Um objeto de conjunto de registros poderá ser atualizado se a fonte de dados for atualizável e você tiver aberto 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. Não é possível atualizar um conjunto de registros somente leitura ou uma fonte de dados.
Para determinar se o conjunto de registros é atualizável
Chame a função membro CanUpdate do objeto do conjunto de registos.
CanUpdateRetorna 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 AddNew, Edite Delete operações). 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. Não é possível editar ou excluir registros existentes. Você pode testar se um conjunto de registros está aberto apenas para acréscimo 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 acréscimo.
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;
}
Atenção
Quando você se preparar para atualizar um conjunto de registros chamando Update, certifique-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 no conjunto de registros para identificar qual registro na tabela deve 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 lança exceções quando você chama Update.
Adicionando 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
Verifique se o conjunto de registros é anexável.
Chame a função de membro AddNew do objeto recordset.
AddNewPrepara o conjunto de registros para atuar como um buffer de edição. Todos os membros de dados de campo são definidos como o valor especial Nulo e marcados como inalterados, portanto, apenas os valores alterados (sujos) são gravados na fonte de dados quando você chama Update.Defina os valores dos campos de dados do novo registo.
Atribua valores aos membros de dados de campo. Aqueles que você não atribui não são gravados na fonte de dados.
Chame a função membro do objeto do conjunto de registos
Update.UpdateConclui a adição gravando o novo registro na fonte de dados. Para obter informações sobre o que acontece se você não conseguir chamarUpdate, consulte Recordset: How Recordsets Update Records (ODBC).
Para obter informações sobre como a adição de registros funciona e sobre quando os registros adicionados são visíveis em seu conjunto de registros, consulte Recordset: How AddNew, Edit, and Delete Work (ODBC).
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;
}
Sugestão
Para cancelar uma AddNew ou Edit chamada, basta fazer outra chamada para AddNew ou Edit ou chamada Move com o parâmetro AFX_MOVE_REFRESH . Os dados são redefinidos para os seus valores anteriores e você continua no modo Edit ou Add.
Editando um registro em um conjunto de registros
Você pode editar registros existentes se a função de membro CanUpdate do seu conjunto de registros retornar um valor diferente de zero.
Para editar um registro existente em um conjunto de registros
Verifique se o conjunto de registros é atualizável.
Desloque-se para o registo que pretende atualizar.
Chame a função Edit member do objeto do conjunto de registros.
EditPrepara 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 dizer 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 Update.Defina os valores dos campos de dados do novo registo.
Atribua valores aos membros de dados de campo. Aqueles que você não atribui valores permanecem inalterados.
Chame a função membro do objeto do conjunto de registos
Update.UpdateConclui a edição gravando o registro alterado na fonte de dados. Para obter informações sobre o que acontece se você não conseguir chamarUpdate, consulte Recordset: How Recordsets Update Records (ODBC).
Depois de editar um registo, o registo editado permanece o registo atual.
O exemplo a seguir mostra uma operação Edit. Ele pressupõe que o usuário tenha movido 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;
}
Sugestão
Para cancelar uma AddNew ou Edit chamada, basta fazer outra chamada para AddNew ou Edit ou chamada Move com o parâmetro AFX_MOVE_REFRESH . Os dados são redefinidos para os seus valores anteriores e você continua no modo Edit ou Add.
Excluindo um registro de um conjunto de registros
Você pode excluir registros se a função de membro CanUpdate do seu conjunto de registros retornar um valor diferente de zero.
Para excluir um registro
Verifique se o conjunto de registros é atualizável.
Desloque-se para o registo que pretende atualizar.
Chame a função membro Delete do objeto conjunto de registos.
Deletemarca imediatamente o registro como excluído, tanto no conjunto de registros quanto na fonte de dados.Ao contrário de
AddNeweEdit,Deletenão tem uma chamada correspondenteUpdate.Desloque-se para outro registo.
Observação
Ao percorrer o conjunto de registos, os registos excluídos talvez não sejam ignorados. Para obter mais informações, consulte a função de membro IsDeleted .
O exemplo a seguir mostra a operação Delete. Ele pressupõe que o usuário tenha movido para um registro que o usuário deseja excluir. Quando Delete é chamado, é importante passar para um novo registo.
rsStudent.Delete( );
rsStudent.MoveNext( );
Para obter mais informações sobre os efeitos das funções de membro AddNew, Edit e Delete, consulte Recordset: How Recordsets Update Records (ODBC).
Ver também
Conjunto de registros (ODBC)
Conjunto de registros: Bloqueando registros (ODBC)