[firebase-br] Problema com Execute Statement com Insert

Andrei Luís compuvale.software em gmail.com
Ter Maio 23 09:43:32 -03 2006


Salve Luiz, a quanto tempo...

Infelizmente seu chute foi na canela, como os tantos que já dei nessa
história com Execute Statement.

Entretanto, nem tudo está perdido, a dica do Kléber Caneva funcionou.
Das duas formas.

[]
Andrei

Em 23/05/06, RedDevil<reddevil_fdb em yahoo.com.br> escreveu:
> ola Andrei,
>
> este complemento seria desnecessario... mas apenas para ficar bem clara a
> viagem, tente deixar a tua string assim:
>
> wSQL1 ='Insert into teste (REGISTRO_ID, TESTE, DATA) Values(0, ' || '''RF'''
> || ', ' || wdataven || ')';
>
> se der certo, pode me enviar o "trofeu cata piolho" por e-mail mesmo...
> ;o)
>
>
> []s
> força sempre!!!
> ate +++
>
> --
> Luiz "RedDevil" Stefanski - Linux User #399026
> http://www.RedDevil.eti.br - Delphi 4 Powered by IBObjects
> exemplos e dicas sobre o IBObjects:
> http://www.RedDevil.eti.br/ibob.htm
> usando o IBExpert no Linux:
> http://www.firebase.com.br/fb/artigo.php?id=1366
>
>
>
> ----- Original Message -----
> From: "Andrei Luís" <compuvale.software em gmail.com>
> To: "Firebase" <lista em firebase.com.br>
> Sent: Monday, May 22, 2006 11:52 PM
> Subject: [firebase-br] Problema com Execute Statement com Insert
>
>
> Continuo na minha via crucis pra fazer um insert via SP.
>
> Bem, a ideia é fazer um select em uma tabela para recuperar uns
> valores, entre eles diversas datas de vencimento e valores de faturas.
>
> O último problema que estou tendo é não conseguir fazer o insert de
> uma variável data em um campo data.
>
> Tabela de teste:
>
> CREATE GENERATOR GEN_TESTE_REGISTRO_ID;
>
> CREATE TABLE TESTE (
>    REGISTRO_ID  INTEGER,
>    TESTE        VARCHAR(250),
>    DATA         DATE
> );
>
> SET TERM ^ ;
>
> CREATE TRIGGER TESTE_BI FOR TESTE
> ACTIVE BEFORE INSERT POSITION 0
> AS
> BEGIN
>    NEW.REGISTRO_ID = GEN_ID(GEN_TESTE_REGISTRO_ID,1);
> END
> ^
>
> SET TERM ; ^
>
>
> A SP de teste:
>
> SET TERM ^ ;
>
> CREATE PROCEDURE NEW_PROCEDURE
> AS
> DECLARE VARIABLE WSQL1 VARCHAR(100);
> DECLARE VARIABLE WDATAVEN DATE;
> begin
>   wdataven = current_date;
>   wSQL1 ='Insert into teste Values(0, ' || '''RF''' || ', ' || wdataven ||
> ')';
>   execute statement wsql1;
> end
> ^
> SET TERM ; ^
>
> Joguei current_date apenas para teste, a variável wdataven será
> preenchida com uma data recuperada em um select.
>
> Ao executar, dá erro :
> Overflow occurred during data type conversion.
> conversion error from string "1979".
>
> Se troco o sql dessa forma:
> wSQL1 ='Insert into teste Values(0, ' || '''RF''' || ', wdataven' || ')';
>
> Ao executar dá erro de column unknow wDataven
>
> Se faço assim dá certo, mas não é current_date que preciso armazenar...
> wSQL1 ='Insert into teste Values(0, ' || '''RF''' || ', current_date' ||
> ')';
>
> Já tentei fazer cast( wdataven as Date) na linha onde monto o SQL e
> cast(current_date as Date) na linha onde atribuo o valor à variável, e
> o resultado é o mesmo.
>
> O mais "legal": se tiro o '''RF''' e coloco wdataven no lugar,
> funciona!!! Grava o mesmo 1979 que aparece em um dos erros acima.
>
> Onde estou errando? Porque não grava uma variável data em um campo
> data, e grava uma variável data em um campo varchar???
>
> []s
> Andrei




Mais detalhes sobre a lista de discussão lista