[firebase-br] ZeosDBO e Execute block funciona?
Gladiston Santana
gladiston em vidy.com.br
Terça Outubro 26 23:25:59 -03 2021
Eu desisti de usar queries usando execute block com prepare porque não teve
jeito, na lista de dev me falaram para testar na versão 8,
Mas funciona o execute block se for mais literal e desligar o
parametro ParamCheck:=false;
qt1.sql.clear;
qt1.sql.add('execute block as');
qt1.sql.add('declare variable P_UUID_AGENDA varchar(36); ');
qt1.sql.add('declare variable P_UUID_COLABORADOR varchar(36); ');
qt1.sql.add('declare variable P_DT_NUTIL date;');
qt1.sql.add('declare variable P_DESCRICAO varchar(4096); ');
qt1.sql.add('begin');
qt1.sql.add('
P_UUID_AGENDA='+QuotedStr(qf1.FieldbyName('ID_AGENDA').AsString)+'; ');
qt1.sql.add(' P_UUID_COLABORADOR='+QuotedStr(sUUID_COLABORADOR)+';
');
qt1.sql.add(' P_DT_NUTIL='+QuotedStr(FormatDateTime('dd.mm.yyyy',
iCur_Date))+';');
qt1.sql.add('
P_DESCRICAO='+QuotedStr(qf1.FieldbyName('DESCRICAO').AsString)+'; ');
qt1.sql.add(' if (not exists(select * from AGENDA_NUTIL ');
qt1.sql.add(' where
UUID_COLABORADOR=:P_UUID_COLABORADOR ');
qt1.sql.add(' and DT_NUTIL=:P_DT_NUTIL)) then');
qt1.sql.add(' begin');
qt1.sql.add(' update or insert into AGENDA_NUTIL (');
qt1.sql.add(' UUID_AGENDA, UUID_COLABORADOR, DT_NUTIL,
DESCRICAO)');
qt1.sql.add(' values (');
qt1.sql.add(' :P_UUID_AGENDA, :P_UUID_COLABORADOR, :P_DT_NUTIL,
:P_DESCRICAO)');
qt1.sql.add(' matching (UUID_AGENDA);');
qt1.sql.add(' end');
qt1.sql.add('end');
qt1.ParamCheck:=false;
qt1.ExecSQL;
Testei também um parâmetro chamado ParamChar que por default é ':' trocando
para outro qualquer e também o ponto de interrogação como ParamChar, mas
falharam. A mensagem de erro é bem genérica "invalid request BLR at offset
131 undefined parameter number. Error code: -104. Invalid token The SQL:
execute block e repete a query inteira. Aparentemente não reconhece o
método por não diferenciar parametros de variaveis iniciando com dois
pontos.
Mais detalhes sobre a lista de discussão lista