[firebase-br] ZeosDBO e Execute block funciona?
Carlos H. Cantu
listas em warmboot.com.br
Terça Outubro 26 06:02:07 -03 2021
Você não disse qual a mensagem de erro gerada, mas enfim, parece que
tem (ou tinha) prolemas com execute block e Zeos:
https://sourceforge.net/p/zeoslib/tickets/67/
https://sourceforge.net/p/zeoslib/tickets/384/
[]s
Carlos H. Cantu
eBook Guia de Migração para o FB 4 - www.firebase.com.br/guiafb4.php
www.FireBase.com.br - www.firebirdnews.org - blog.firebase.com.br
GSvl> Primeiro eu tentei:
GSvl> query1.sql.text:='
GSvl> execute block (
GSvl> P_UUID_AGENDA varchar(36)=? ,
GSvl> P_UUID_COLABORADOR varchar(36)=?,
GSvl> P_DT_NUTIL date=? ,
GSvl> P_DESCRICAO varchar(4096)=? )
GSvl> as
GSvl> begin
GSvl> if (not exists(select * from AGENDA_NUTIL
GSvl> where UUID_COLABORADOR=:P_UUID_COLABORADOR
GSvl> and DT_NUTIL=:P_DT_NUTIL)) then
GSvl> begin
GSvl> update or insert into AGENDA_NUTIL (
GSvl> UUID_AGENDA, UUID_COLABORADOR, DT_NUTIL, DESCRICAO)
GSvl> values (
GSvl> :P_UUID_AGENDA, :P_UUID_COLABORADOR, :P_DT_NUTIL, :P_DESCRICAO)
GSvl> matching (UUID_AGENDA);
GSvl> end
GSvl> end
GSvl> ';
GSvl> query1 .prepare;
GSvl> Então descobri que o Zeos prepara sem erros, mas não executa com ExecSQL
GSvl> dando erro na primeira linha. Código tá perfeito no IBExpert e é a forma
GSvl> que uso no Firedac. Daí chutei o pau da barraca e construi a query ficando
GSvl> assim:
GSvl> execute block as
GSvl> declare variable P_UUID_AGENDA varchar(36)='1';
GSvl> declare variable P_UUID_COLABORADOR varchar(36)='0';
GSvl> declare variable P_DT_NUTIL date='06.04.2012';
GSvl> declare variable P_DESCRICAO varchar(4096)='Imenda de feriado 06/04 sexta
GSvl> feira santa';
GSvl> begin
GSvl> if (not exists(select * from AGENDA_NUTIL
GSvl> where UUID_COLABORADOR=:P_UUID_COLABORADOR
GSvl> and DT_NUTIL=:P_DT_NUTIL)) then
GSvl> begin
GSvl> update or insert into AGENDA_NUTIL (
GSvl> UUID_AGENDA, UUID_COLABORADOR, DT_NUTIL, DESCRICAO)
GSvl> values (
GSvl> :P_UUID_AGENDA, :P_UUID_COLABORADOR, :P_DT_NUTIL, :P_DESCRICAO)
GSvl> matching (UUID_AGENDA);
GSvl> end
GSvl> end
GSvl> Nada de errado nela, o IBExpert executa normalmente, mas o ZeosDBO falha
GSvl> dizendo que tem erro na primeira linha.
GSvl> Alguém ai já conseguiu executar execute block com o Zeos? Tô começando a
GSvl> achar que ele não vai funcionar.
Mais detalhes sobre a lista de discussão lista