[firebase-br] FOR EXECUTE STATEMENT - ERRO

Moacir - GMail prismars em gmail.com
Dom Out 25 08:18:01 -03 2009


Renato,

tente fazer o cast diretamente na sentença:

pWHERE = '(DOS.TDOS_DTREGISTRO BETWEEN ''' || Cast(DATAINICIAL  as date)||''' AND '''||
Cast(DATAFINAL as date) ||''')';


Sucesso !!

Moacir


bvrenato escreveu:
> Boa noite a todos!
>
> Estou implementando a procedure abaixo no Firebird 2.1 + Delphi 7 + DbExpress,
> mas está ocorrendo um erro (invalid argument in EXECUTE STATEMENT - cannot
> convert to string) na aplicação.
>
> Este erro ocorre na linha:
> pWHERE = '(DOS.TDOS_DTREGISTRO BETWEEN ''' || DATAINICIAL ||''' AND '''||
> DATAFINAL ||''')';
> Ou na linha onde implemento o ORDER BY (concatenando parametros).
>
> Implementei as variáveis DATANICIAL e DATAFINAL para converter o formato da
> data.
> Já usei CAST nos parametros DATAINICIAL e DATAFINAL;
> Já utilizei os parametros de entrada (iDTINICIO e IDTTERMINO);
>
> Nada funcionou....
>
>
> Eu tentei um WHERE do tipo:
> pWHERE = '(DOS.TDOS_CODCLIENTE = ' || 1 || ')';
> E funciolu correto.
>
> Será que alguém poderia dar uma criticada no código abaixo?
>
>
> Grato,
>
> Renato
>
>
>
> CREATE PROCEDURE SP_CSTA_PROCESSO (
>     icliente integer,
>     isubcliente integer,
>     iocorrencia integer,
>     iparametro integer,
>     iordenacao integer,
>     idtinicio date,
>     idttermino date)
> returns (
> ...
> )
> as
> declare variable pselect varchar(1000);
> declare variable pfrom varchar(1000);
> declare variable pwhere varchar(1000);
> declare variable porderby varchar(1000);
> declare variable totdiasparados integer;
> declare variable tempoliberacao integer;
> declare variable datainicial char(10);
> declare variable datafinal char(10);
> declare variable parametro smallint;
> BEGIN
>
>   -- >>>>> CONVERSÃO DO FORMATO DA DATA INICIAL E DATA FINAL
>
>   DATAINICIAL = SUBSTRING(CAST(:iDTINICIO AS VARCHAR(10)) FROM 9 FOR 2)||'.'||
>                 SUBSTRING(CAST(:iDTINICIO AS VARCHAR(10)) FROM 6 FOR 2)||'.'||
>                 SUBSTRING(CAST(:iDTINICIO AS VARCHAR(10)) FROM 1 FOR 4);
>   DATAFINAL   = SUBSTRING(CAST(:iDTTERMINO AS VARCHAR(10)) FROM 9 FOR 2)||'.'||
>                 SUBSTRING(CAST(:iDTTERMINO AS VARCHAR(10)) FROM 6 FOR 2)||'.'||
>                 SUBSTRING(CAST(:iDTTERMINO AS VARCHAR(10)) FROM 1 FOR 4);
>
>
>   -- >>>>> CONSTRUÇÃO DA CLÁUSULA SELECT
>
>   pSELECT ='SELECT DOS.TDOS_DOSSIE, DOS.TDOS_PROCESSOCLIENTE,  DOS.TDOS_DI,
> DOS.TDOS_CONHECIMENTO, DOS.TDOS_DTREGISTRO, ' ||
>                   'DOS.TDOS_DTDISTRIBUICAO, DOS.TDOS_DTDESEMBARACO,
> DOS.TDOS_DTCI, DOS.TDOS_DTEXONERACAO, DOS.TDOS_DTAVERMELHADO, ' ||
>                   'DOS.TDOS_DTLANCAMENTO, FIS.TFIS_NOME, ARM.TARM_ARMAZEM,
> PMT.TPMT_PARAMETRO, CLI.TCLI_RSOCIAL, SCL.TSCL_RSOCIAL ';
>
>   -- >>>>> CONSTRUÇÃO DA CLÁUSULA FROM
>
>   pFROM =  'FROM CPA_TDOSSIE DOS ' ||
>                 'JOIN CPA_TFISCAL         FIS ON FIS.TFIS_CODIGO =
> DOS.TFIS_CODIGO ' ||
>                 'JOIN CPA_TARMAZEM        ARM ON ARM.TARM_CODIGO =
> DOS.TARM_CODIGO ' ||
>                 'JOIN CPA_TPARAMETRIZACAO PMT ON PMT.TPMT_CODIGO =
> DOS.TPMT_CODIGO ' ||
>                 'JOIN CPA_TSUBCLIENTE     SCL ON SCL.TSCL_CODIGO =
> DOS.TSCL_CODIGO ' ||
>                 'JOIN CPA_TCLIENTE        CLI ON CLI.TCLI_CODIGO =
> SCL.TCLI_CODIGO ';
>
>
>   -- >>>>> CONSTRUÇÃO DA CLÁUSULA WHERE
>
>   -- TIPO DE OCORRÊNCIA
>
>   pWHERE = '(DOS.TDOS_DTREGISTRO BETWEEN ''' || DATAINICIAL ||''' AND '''||
> DATAFINAL ||''')';
>
>   pWHERE = ' WHERE ' || pWHERE ;
>
>
>
>   -- >>>>> CONSTRUÇÃO DA CLÁUSULA ORDER BY
>
> --  IF (:iORDENACAO = 0) THEN  --CLIENTE, SUBCLIENTE E DATA DO REGISTRO
> --       pORDERBY =  'CLI.TCLI_RSOCIAL,SCL.TSCL_RSOCIAL,DOS.TDOS_DTREGISTRO';
>
>
> --  pORDERBY = ' ORDER BY ' || pORDERBY;
>
>
>   pSELECT   =  pSELECT || pFROM || pWHERE ;
>
>    FOR EXECUTE STATEMENT  pSELECT
>    INTO
> ...
> ___________________________________________________________________________________
> Para fazer uma ligação DDD pra perto ou pra longe, faz um 21. A Embratel tem
> tarifas muito baratas esperando por você. Aproveite!
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>   




Mais detalhes sobre a lista de discussão lista