[firebase-br] FOR EXECUTE STATEMENT - ERRO

bvrenato bvrenato em click21.com.br
Dom Out 25 12:02:15 -03 2009


Olá Moacir....

Já havia feito dessa forma, mas tb não funcionou.
Estou com um projeto parado por causa desse problema... tá osso.

Já converti essas variáveis de entrada de tipo DATE para tipo CHAR e VARCHAR, e
nada...

Será que tem haver com o componente DBExpress ?


grato

Renato





Citando Moacir - GMail <prismars em gmail.com>:

> 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
> >
> >
>
> ______________________________________________
> 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
>



___________________________________________________________________________________
Para fazer uma ligação DDD pra perto ou pra longe, faz um 21. A Embratel tem
tarifas muito baratas esperando por você. Aproveite!





Mais detalhes sobre a lista de discussão lista