Verificar se o registro foi alterado
Olá galera do Firebird. Não sei se é nesse fórum ou de Delphi mas vamos lá. Tenho uma tela de cadastro de cliente com ClienteID e Nome, quando o usuário edita e grava é alterado o campo dtalt com a data do servidor e até ai tudo bem. A questão é que essa data é gravada independente se foi realmente alterado alguma coisa no registro, se simplesmente o usuário clicar em editar e depois gravar o campo dtalt vai ser gravado. Gostaria de saber se é possível gravar o dtalt se o registro foi realmente alterado em algum campo. Ex:
ClienteID Nome
27 Carlos
Se eu editar a alterar o nome para Carlos da Silva vai gravar o dtalt por que que realmente alterei o registro no campo Nome, mas se eu clicar em editar e gravar eu não alterei nada e nesse caso o campo dtalt não pode ser mudado.
Obrigado.
ClienteID Nome
27 Carlos
Se eu editar a alterar o nome para Carlos da Silva vai gravar o dtalt por que que realmente alterei o registro no campo Nome, mas se eu clicar em editar e gravar eu não alterei nada e nesse caso o campo dtalt não pode ser mudado.
Obrigado.
Developer1978
Curtidas 0
Respostas
Emerson Nascimento
19/08/2009
a atribuição do campo Dtalt é feita no Delphi ?
GOSTEI 0
Developer1978
19/08/2009
a atribuição do campo Dtalt é feita no Delphi ?
Sim, no Delphi assim
procedure TFormCadCliente.btnGravarClick(Sender: TObject);
begin
if cdsCadClientes.State = dsEdit then
begin
cdsCadClienteDtAlt.AsDateTime := Lib001.ServerDate;
cdsCadClientes.Post;
cdsCadClientes.ApplyUpdates(0);
end;
end;
Conexão usando dbexpress com firebird e delphi 7
GOSTEI 0
Emerson Nascimento
19/08/2009
pelo Delphi:
[size=18:faf2e754ce][b:faf2e754ce]ou[/b:faf2e754ce][/size:faf2e754ce] crie um TRIGGER para executar esta tarefa. caso opte pelo TRIGGER, não é necessário qualquer tratamento pelo Delphi.
procedure TFormCadCliente.btnGravarClick(Sender: TObject); begin if (cdsCadClientes.State = dsEdit) and (cdsCadClientesNome.OldValue <> cdsCadClientesNome.NewValue) then cdsCadClienteDtAlt.AsDateTime := Lib001.ServerDate; cdsCadClientes.Post; cdsCadClientes.ApplyUpdates(0); end;
[size=18:faf2e754ce][b:faf2e754ce]ou[/b:faf2e754ce][/size:faf2e754ce] crie um TRIGGER para executar esta tarefa. caso opte pelo TRIGGER, não é necessário qualquer tratamento pelo Delphi.
CREATE OR ALTER TRIGGER ATU_CLI FOR CLIENTE ACTIVE BEFORE UPDATE POSITION 0 AS begin if (new.NOME <> old.NOME) then new.DTALT = current_date; -- ou current_timestamp, para data e hora end
GOSTEI 0
Developer1978
19/08/2009
pelo Delphi:
[size=18:4404c0e9e2][b:4404c0e9e2]ou[/b:4404c0e9e2][/size:4404c0e9e2] crie um TRIGGER para executar esta tarefa. caso opte pelo TRIGGER, não é necessário qualquer tratamento pelo Delphi.
procedure TFormCadCliente.btnGravarClick(Sender: TObject); begin if (cdsCadClientes.State = dsEdit) and (cdsCadClientesNome.OldValue <> cdsCadClientesNome.NewValue) then cdsCadClienteDtAlt.AsDateTime := Lib001.ServerDate; cdsCadClientes.Post; cdsCadClientes.ApplyUpdates(0); end;
CREATE OR ALTER TRIGGER ATU_CLI FOR CLIENTE ACTIVE BEFORE UPDATE POSITION 0 AS begin if (new.NOME <> old.NOME) then new.DTALT = current_date; -- ou current_timestamp, para data e hora end
No Delphi não rolou por que tenho que tirar o foco do componente que eu editeim mas vou criar a trigger via IBExpert para testar.
GOSTEI 0
Carlos Mazzi
19/08/2009
Resolvido ?
GOSTEI 0
Jordelino Santos
19/08/2009
Resolvido. Obrigado.
GOSTEI 0