[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