Olha vou dar um "xutão" aqui...

Se estiver executando sua Trigger num ZQuery normal, possivelmente ele vai
dar erro porque o ZQuery precisa de um retorno do SQL
Em outras palavras, ele serve pra SELECT * FROM TABELA
Assim como o ZUpdate serve pra UPDATE :-)
Pra executar Procedures e Triggers do banco você deve executar diretamente
no SQL direto

Exemplo:

var
  zqrLocal: TZQuery;
begin
  zqrLocal := TZQuery.Create(nil);
  zqrLocal.Connection := SeuZconecta;
  zqrLocal.Close;
  zqrLocal.SQL.Add('SEU SQL');
  zqrLocal.ExecSQL;
  FreeAndNil(zqrLocal);
end;

Veja ai se funciona


Marcelo Silva
---------------------------------------


Em 3 de setembro de 2013 17:35, Rafael Fialho Corrêa
<r.fia...@ibest.com.br>escreveu:

> Já passei por algo parecido sim, Rafael.
> Normalmente o erro estava no próprio SQL repassado ao Zeos.
> Eu utilizo sempre esta estrutura para escrita/edição de dados:
> "select * from tabela where id_tabela = :id_tabela"
> Neste caso, ao efetuar insert ou update, o sistema sempre se comporta de
> maneira correta.
>
> De qualquer forma, creio que deves verificar as propriedades do teu
> TZQuery, antes de mais nada, e verificar se a estrutura de query repassada
> ao componente está de maneira simples e "filtrada".
>
>
> Em 3 de setembro de 2013 17:06, Rafael Naves <emaildorafaelna...@gmail.com
> > escreveu:
>
>> Boa tarde a todos,
>>
>> Eu tenho uma trigger simples para preencher alguns campos da minha tabela
>> a cada alteração de registro:
>>
>> *CREATE TRIGGER tabela_teste_trigger_ui
>> *
>> *  BEFORE INSERT OR UPDATE *
>> *  ON public.tabela_teste FOR EACH ROW *
>> *  EXECUTE PROCEDURE public.atualiza_campos_ultimos();*
>>
>> *>>>>> Ela aciona uma a função abaixo:*
>>
>> *CREATE OR REPLACE FUNCTION public.atualiza_campos_ultimos(
>> *
>> *)*
>> *RETURNS trigger AS*
>> *$body$*
>> *BEGIN
>> *
>> *
>> *
>> *  if (TG_OP = 'INSERT') then*
>> *    operacao := 'I';*
>> *  else*
>> *    operacao := 'A';  *
>> *  end if;*
>> *  *
>> *  new.DATA_ALTERACAO:= current_timestamp;*
>> *  new.TIPO_OPERACAO := operacao;
>> *
>> *  *
>> *  if (TG_OP = 'INSERT') then
>> *
>> *    return old;*
>> *  else*
>> *    return new;*
>> *  end if;*
>> *
>> *
>> *END;
>> *
>> *$body$*
>> *LANGUAGE 'plpgsql'*
>> *VOLATILE*
>> *RETURNS NULL ON NULL INPUT*
>> *SECURITY INVOKER*
>> *COST 100;*
>>
>> *Problemática:*
>>
>> Ao executar pelo banco de dados, através de scripts funciona normalmente,
>> no entanto, quando é executada via aplicação usando Delphi 2007 + Zeos
>> 7.0.4 eu recebo o erro:
>>
>> *'0 record(s) updated. Only one record should have been updated.'*
>> *
>> *
>> Em minhas pesquisas e testes realizado pude perceber que o problema esta
>> relacionado com o update dos campos da tabela, fato é que, ao desativar a
>> trigger a aplicação consegue gravar os dados normalmente na tabela.
>>
>> Alguém já passou por isso ou percebeu alguma coisa na função que possa
>> estar ocasionando o problema?
>>
>> Obrigado.
>>
>>
>>
>> --
>> ------------------------
>> Rafael M. Naves
>> Analista/Programador
>> (31)9861-4047 (*novo!*)
>> (31)8636-8910
>> http://www.twitter.com/navesrafael
>> http://www.rafaelnaves.com
>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> pgbr-geral@listas.postgresql.org.br
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
Marcelo Silva
----------------------------------------------------------------
Desenvolvedor Delphi / PHP
My Postgres database
Cel.: (11) 99693-4251
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Reply via email to