Fórum Verificar se o registro foi alterado #60809

19/08/2009

0

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.


Developer1978

Developer1978

Responder

Posts

19/08/2009

Emerson Nascimento

a atribuição do campo Dtalt é feita no Delphi ?


Responder

Gostei + 0

19/08/2009

Developer1978

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


Responder

Gostei + 0

20/08/2009

Emerson Nascimento

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



Responder

Gostei + 0

25/08/2009

Developer1978

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: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.
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.


Responder

Gostei + 0

04/07/2010

Carlos Mazzi

Resolvido ?
Responder

Gostei + 0

04/07/2010

Jordelino Santos

Resolvido. Obrigado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar