Passar valor para campos requeridos no firebird que não estão na tela e capturar campos que tem seus default definido no Firebird

08/06/2009

OLá Equipe DevMedia


Preciso de uma ajuda de vocês.

Tecnologia utilizada : Delphi 2009 com DbExpress e Firebird 2.1


Como sou iniciante no Delphi, não consigo realizar tudo o que gostaria de fazer, fiz toda estrutura no firebird e agora estou tentando por isto em pratica no Delphi.

No meu banco de Dados no Firebird, tenho alguns campos que são padrões em minhas tabelas.

Nestes campos , temos por exemplo os campos DATAAUD e AUDWIN que exemplifica os dois casos na qual preciso de ajuda.

O primeiro campo (DATAAUD) é apenas para gravar no banco a data da operação do usuario (este campo eu não vou mostar na tela do delphi) e ele é um campo NOT NULL no firebird,  Como faço dentro do delphi para passar um valor para o mesmo (no caso deste campo, o valor seria "NOW', ja que ele é um timestamp) no momento da inclusão do meu registro?

Ja o segundo campo (AUDWIN), ele é gerado por um trigger, semelhante a ação do generator, ele me traz algumas informações que vou mostrar na tela do delphi, atravez de um DBTEXT, para facilitar ao usuario (e o meu trabalho tbm, pois não precisarei ficar logando no banco para saber quem incluiu ou alterou o registro, ou qual a data das operações, etc), como eu faço para capturar seu resultado do firebird para a tela do delphi, no momento q eu salvar o registro na sua inclusão ou alteração, sem precisar pesquisar o registro e entrar nele novamente para ver o resultado.

Vale observar que eu terei este campo tanto em tabelas master como em tabelas detalhes.

Segue abaixo uma tabela de exemplo com sua trigger, se você criar a tabela com a trigger e incluir um ou dois registros na tabela, preenchendo apenas o campo DESCRICAOALUNO e mesmo alterando, você verá o resultado do campo, retornado pela triggers, esta trigger tem sua ação tanto no before insert qto no before update;


CREATE GENERATOR GEN_ALUNOS_ID;

CREATE TABLE ALUNOS (
    ALUNOS_ID       INTEGER NOT NULL,
    DATAAUD         TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
    AUDWIN          VARCHAR(50) COLLATE WIN_PTBR,
    USUARIO         VARCHAR(30) DEFAULT CURRENT_USER,
    EMPRESA         INTEGER DEFAULT 0 NOT NULL,
    DESCRICAOALUNO  VARCHAR(50)
);


ALTER TABLE ALUNOS ADD CONSTRAINT PK_ALUNOS PRIMARY KEY (ALUNOS_ID);



/* Trigger: ALUNOS_BI */
CREATE OR ALTER TRIGGER ALUNOS_BI FOR ALUNOS
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ALUNOS_ID IS NULL) THEN
    NEW.ALUNOS_ID = GEN_ID(GEN_ALUNOS_ID,1);
END
^


/* Trigger: ALUNOS_BIU_AUDWIN */
CREATE OR ALTER TRIGGER ALUNOS_BIU_AUDWIN FOR ALUNOS
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable hoje TIMESTAMP;
declare variable usuario VARCHAR(30);
declare variable operacao VARCHAR(30);
begin
  hoje = current_timestamp;
  usuario = user;

  if (inserting) then
    operacao = 'Incluido por';
  else
  if (updating) then
    operacao = 'Alterado por';

  new.audwin = :operacao || ' ' || :usuario || ' em ' || :hoje;

end
^





Abraços,


Rogério Nascimento.
Rogério Nascimento

Rogério Nascimento

Curtidas 0

Respostas

Rodrigo Mourão

Rodrigo Mourão

08/06/2009

Olá Rogério,

Vamos lá. O primeiro caso se resolve apenas indo no evento OnNewRecord do clientdataset que tem este campo e adicionando o seguinte codigo:

ClienteDataSet.FieldByName('DATAAUD').ASDataTime := Now;

Agora o segundo problema você deverá fazer o seguinte. Ao inserir ou altera a trigger irá disparar com isso seus dados serão gerados. Após dar um ApplyUpdates(0) chame o metodo refresh do clientDataset. Isso irá atualizar o registro e trazer os dados gerados pela trigger.

Espero ter ajudado.

Abs.

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi


GOSTEI 0
Rogério Nascimento

Rogério Nascimento

08/06/2009

 Mais uma vez, obrigado Rodrigo.
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

08/06/2009

Disponha,

Estamos sempre a disposição.

Abs.

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
POSTAR