[firebase-br] Posso executar EXECUTE BLOCK com componente ClientDataSet?

Paulo Geloramo paulogeloramo em terra.com.br
Qua Dez 27 15:16:12 -03 2006


Posso chamar o EXECUTE BLOCK atraves do componente ClientDataSet
conforme abaixo?

Pois se executo o EXECUTE BLOCK no IBExpert funciona, mas chamando 
conforme abaixo apresenta a mensagem de erro abaixo:


Select := 'EXECUTE BLOCK (ID_PRODUTO INTEGER = :ID_PRODUTO) ';
Select := Select + 'RETURNS ( ';
...
Select := Select + 'END';

Neste ponto copio a variavel Select e executo no IBExpert com sucesso.


ClientDataSet1.Close;
ClientDataSet1.CommandText := Select;
ClientDataSet1.Params.ParamByName('ID_PRODUTO').AsInteger := dmA.cdsSaldo.FieldByName('ID_PRODUTO').AsInteger;
ClientDataSet1.Open;


---------------------------
Teste
---------------------------
Erro no servidor: Token unknown - line 1, column 291
?.
---------------------------
OK   
---------------------------

segue abaixo o Select na integra:

      Select := 'EXECUTE BLOCK (ID_PRODUTO INTEGER = :ID_PRODUTO) ';
      Select := Select + 'RETURNS ( ';
      Select := Select + 'CODIGO_PONTO INTEGER, ';
      Select := Select + 'NOME_PRODUTO VARCHAR(30), ';
      Select := Select + 'EDICAO_CAPA VARCHAR(6), ';
      Select := Select + 'REMESSA INTEGER, ';
      Select := Select + 'DEVOLUCAO INTEGER, ';
      Select := Select + 'VENDA INTEGER, ';
      Select := Select + 'LANCAMENTO DATE, ';
      Select := Select + 'CODIGO_EDICAO INTEGER, ';
      Select := Select + 'TOTAL INTEGER) ';
      Select := Select + 'AS ';
      Select := Select + 'BEGIN ';
      Select := Select + '  FOR SELECT CODIGO_PONTO ';
      Select := Select + '      FROM PONTO ';
      Select := Select + '      INTO :CODIGO_PONTO DO ';
      Select := Select + '  BEGIN ';
      Select := Select + '    FOR SELECT FIRST ' + IntToStr(cbHistoricoRemessaDevolucaoVenda.ItemIndex) + ' P.NOME_PRODUTO, E.EDICAO_CAPA, I.REMESSA, I.DEVOLUCAO, I.VENDA, E.LANCAMENTO, E.CODIGO_EDICAO, ';
      Select := Select + '        (SELECT SUM(M.REMESSA) FROM CE_PONTO_ITEM M WHERE M.ID_EDICAO = E.ID_EDICAO) AS TOTAL ';
      Select := Select + '        FROM CE_PONTO_ITEM I ';
      Select := Select + '        JOIN PONTO T ON (I.ID_PONTO = T.ID_PONTO) ';
      Select := Select + '        JOIN EDICAO E ON (I.ID_EDICAO = E.ID_EDICAO) ';
      Select := Select + '        JOIN PRODUTO P ON (E.ID_PRODUTO = P.ID_PRODUTO) ';
      Select := Select + '        WHERE E.ID_PRODUTO = :ID_PRODUTO AND T.CODIGO_PONTO = :CODIGO_PONTO AND (I.REMESSA + I.DEVOLUCAO + I.VENDA > 0) ';
      Select := Select + '        ORDER BY E.CODIGO_EDICAO DESC ';
      Select := Select + '        INTO :NOME_PRODUTO, :EDICAO_CAPA, :REMESSA, :DEVOLUCAO, :VENDA, :LANCAMENTO, :CODIGO_EDICAO, :TOTAL DO ';
      Select := Select + '    BEGIN ';
      Select := Select + '      SUSPEND; ';
      Select := Select + '    END ';
      Select := Select + '  END ';
      Select := Select + 'END';



Mais detalhes sobre a lista de discussão lista