Data Inclusão e Alteração no Firebird + Delphi 2010

Delphi

14/10/2010

Boa dia, estou com a seguinte situação:
Tenho em cada tabela os seguintes campos.

DTINC_CLI = TIMESTAMP (Data de Inclusão)
DTALT_CLI = TIMESTAMP (Data de Alteração)
CODFUN_CLI = INTEGER (Usuário que incluiu ou alterou o registro)

Mas não estou conseguindo gravar isso no banco de dados. Alguém poderia dar uma dica? Desde já obrigado pela atenção.

Adilson Rumao

Adilson Rumao

Curtidas 0

Respostas

Eriley Barbosa

Eriley Barbosa

14/10/2010

No evento beforepost de suas tabelas, coloque o seguinte código: if suaquery.state = dsInsert then begin   suaquery.fieldbyname('DTINC_CLI').value  := Now;   suaquery.fieldbyname('DTALT_CLI').value  := Now;  {Quando o usuario logar no seu sistema grave o código dele numa variavel global no formulario principal ou datamodule ou unit de funções e inclua a unit que tem a variavel no uses de cada formulario}   suaquery.fieldbyname('CODFUN_CLI).value  := Codigousuariologadonosistema; end else   if suaquery.state = dsEdit then   begin      suaquery.fieldbyname('DTALT_CLI').value  := Now;     {Quando o usuario logar no seu sistema grave o código dele numa variavel global no formulario principal ou   datamodule ou unit de funções e inclua a unit que tem a variavel no uses de cada formulario}   suaquery.fieldbyname('CODFUN_CLI).value  := Codigousuariologadonosistema;    end;
GOSTEI 0
Adilson Rumao

Adilson Rumao

14/10/2010

Ok, vou testar aqui e depois dou um retorno. Muito obrigado.
GOSTEI 0
Adilson Rumao

Adilson Rumao

14/10/2010

Ok Eriley consegui fazer funcionar, muito obrigado pela ajuda.
GOSTEI 0
Adilson Rumao

Adilson Rumao

14/10/2010

Oi bom dia, como disse antes consegui fazer funcionar mas só em partes. Não consegui gravar o Nome do Funcionário que está incluindo ou alterando. Só gravou o código dele. Será que colocando um DBLookupComboBox daria certo?
GOSTEI 0
Alex Bahiano

Alex Bahiano

14/10/2010

Tive esse problema ontem, só consegui resolver depois que coloquei o campo data como DATE e não Timesestamp, uso o firebird 2.5
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

14/10/2010

o campo pode ficar como TimeStamp, desde que você use .Value.
você pode também utilizar .AsSQLTimeStamp junto com a função DateTimeToSQLTimeStamp(), que está na unit SQLTimSt.
GOSTEI 0
Adilson Rumao

Adilson Rumao

14/10/2010

Consegui resolver assim, não sei se seria o modo mais prático e funcional, mas está funcionando.  
procedure TDM.cdsPaisesBeforePost(DataSet: TDataSet);
begin
  if cdsPaises.State = dsInsert then
  begin
    cdsPaises.FieldByName('DATAINC').Value := Now;
    cdsPaises.FieldByName('DATAALT').Value := Now;
    cdsPaises.FieldByName('RESPONSAVEL').Value := TUsuario.GetInstance.Codigo;
  end
  else
  if cdsPaises.State = dsEdit then
  begin
    cdsPaises.FieldByName('DATAALT').Value := Now;
    cdsPaises.FieldByName('RESPONSAVEL').Value := TUsuario.GetInstance.Codigo; {aqui vem da minha classe usuário}
  end;
end;
  E tbm criei um campo Lookup no ClientDataSet.   Só que achei que fica muito carregado o meu DM.    
GOSTEI 0
Adilson Rumao

Adilson Rumao

14/10/2010

Olá galera, alguém para dar uma luz?
GOSTEI 0
Adilson Rumao

Adilson Rumao

14/10/2010

Olá galera, alguém para dar uma luz?
Ae galera, um bom Natal atrasado a todos.   Alguém para dar uma dica?
GOSTEI 0
Ricardo Araujo

Ricardo Araujo

14/10/2010

vc conseguiu resolver o seu problema ?

GOSTEI 0
Adilson Rumao

Adilson Rumao

14/10/2010

Então, do jeito que está hoje funciona. Mas gostaria de saber se tem alguma forma de melhorar o código. Visto que, o DM fica muito carregado (ao meu ver claro).   Desde já obrigado pela atenção.
GOSTEI 0
POSTAR