
Alterar os valores do último registro lido no arquivo selecionado.
MODIFY [SAME] [CASCADE | KEYINFO | SETNULLS]
SAME determina que a alteração só se efetuará caso o conteúdo do registro não tenha sido alterado entre a leitura e a gravação. Caso ocorra alteração do registro durante a transação função DBERR() retorna 333.
CASCADE permite a alteração do valor da chave primária, alterando também o valor das chaves estrangeiras nos registros subordinados ao registro corrente.
KEYINFO atualiza as chaves estrangeiras dos registros subordinados segundo a informação contida no dicionário de dados.
SETNULLS coloca nulo nas chaves estrangeiras dos registros subordinados.
O comando MODIFY só se aplica a arquivo de banco de dados. Este comando é utilizado para alterar o valor de itens chave, a não ser quando se tratar de chaves primárias de arquivos entidades.
Desta forma, o comando MODIFY garante que a referência entre os registros não seja perdida e o banco de dados permaneça íntegro.
Caso haja tentativa de alteração de chave primária, a função DBERR( ) retorna 321 (tentativa de alteração de item chave), exceto quando utilizado com as opções CASCADE, KEYINFO ou SETNULLS. Do contrário para alterar uma chave primária, deve-se incluir um novo registro com o valor da nova chave e excluir o registro com o valor antigo.
Quando utilizado com a opção CASCADE, a modificação é feita da seguinte forma: é alterado o valor da chave primária no registro corrente e logo após são alterados os valores das chaves estrangeiras subordinadas ao registro corrente. Esta opção representa uma alteração em cadeia hierárquica.
Quando utilizado com a opção KEYINFO, a modificação da chave primária do registro corrente é feita dependendo da informação definida para as chaves estrangeiras dos registros em outros arquivos que se referem ao registro corrente. Para cada opção de deleção o comando MODIFY agirá de uma maneira particular.
Quando utilizado com a opção SETNULLS, as chaves estrangeiras dos registros, subordinados ao registro corrente, são modificadas para nulo e o registro corrente é alterado.
Isto só e possível se a chave estrangeira for do tipo nulo. Caso contrário, não será possível a modificação do registro, retornando um código de erro diferente de zero pela função DBERR( ).
O comando MODIFY, por DEFAULT, não permite a alteração do valor da chave primária, retornando um valor diferente de zero pela função DBERR( ), garantindo a integridade referencial.
O exemplo a seguir mostra-nos como alterar itens chave de um arquivo do banco de dados. Caso ocorra alguma inconsistência no valor das chaves a função DBERR( ) retornará um código diferente de 0 (zero).
* O banco de dados bdemp1 deve existir
DATABASE bdemp1 33 a 2 && Abertura do banco de dados bdemp1
USE tab_nfis && Arquivo do banco de dados ( ou tabela)
LOCATE
REPLACE cli_nfis WITH 123, ven_nfis WITH 321, tot_nfis with 10.45
MODIFY
? DBERR( )
O exemplo a seguir tenta alterar o valor de uma chave primária.
DATABASE bdemp1 33 a 2
USE tab_nfis
LOCATE
REPLACE id0_nfis WITH 456
MODIFY
? DBERR( )
O exemplo a seguir mostra-nos como garantir que o registro não foi alterado por outro usuário entre a leitura e a gravação.
DATABASE bdemp1 33 a 2
USE tab_nfis
LOCATE
REPLACE cli_nfis WITH 123, ven_nfis WITH 321, tot_nfis WITH 10.45
* MODIFY SAME verifica antes de gravar se o valor atual
* do registro e o mesmo da leitura
MODIFY SAME
? DBERR()
CHANGE, REPLACE, RESTORE, SAVE, SELECT, DBERR( ), EOF( ), FGMODIFY( ), FMODIFY( ) e RECNO( ).
