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
<[email protected]>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 <[email protected]
> > 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
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> 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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral