[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