Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

EuToComProblema!

problema com stored procedure

Recommended Posts

boa tarde...alguém poderia me ajudar? estou ... COMANDO = 'Select VALOR, PGTO_VIA, DT_VCTO, VALOR_PGTO, VALOR_DESC, VALOR_JUROS From DUPLICATAS Where EMPRESA_ID = ' || :EMPRESA as || 'and LANCA_ID = ' || :LANCA; if (:FORNECEDOR > 0) then COMANDO = COMANDO || ' and FORNECEDOR_ID = ' || :FORNECEDOR; else COMANDO = COMANDO || ' and CLIENTE_ID = ' || :CLIENTE; For execute statement COMANDO Into :vVALOR, :vPAGTO_VIA, :vDT_VCTO, :vVALOR_PGTO, :vVALOR_DESC, :vVALOR_JUROS do...me gera o seguinte erro: "Invalid argument in EXECUTE STATEMENT - cannot convert to string"aí tentei assim:... COMANDO = 'Select VALOR, PGTO_VIA, DT_VCTO, VALOR_PGTO, VALOR_DESC, VALOR_JUROS From DUPLICATAS Where EMPRESA_ID = ' || cast(:EMPRESA as char(1)) || 'and LANCA_ID = ' || cast(:LANCA as char(1)); if (:FORNECEDOR > 0) then COMANDO = COMANDO || ' and FORNECEDOR_ID = ' || cast(:FORNECEDOR as char(4)); else COMANDO = COMANDO || ' and CLIENTE_ID = ' || cast(:CLIENTE as char(4)); For execute statement COMANDO Into :vVALOR, :vPAGTO_VIA, :vDT_VCTO, :vVALOR_PGTO, :vVALOR_DESC, :vVALOR_JUROS do...mas ocorre o mesmo erro!não sei mais o que posso tentar! alguém sabe como posso fazer isso funcionar? uso a versão 1.5 do firebirdobrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde...Você ja tentou executar essa stored de dentro do próprio FIREBIRD???ele gera erro dentro do banco???Pelo Delphi... você está utilizando qual componente para criar o acesso???

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim este erro ocorre no firebird,no delphi o erro é o seguinte:"Variable type (position2) in EXECUTE STATEMENT 'select........' INTO does not match return "e estou usando um TIBQuery para fazer a chamada......

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, já que você diz que o erro da já ao executar pelo banco, então primeiro tem que consertar a Stored em sí!!!e outra coisa...Pq não usa um SQLStoredPROC????flw aew!

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou alterando o sistema, e como já estava em TIBQuery deixei assim.mas qual seria a diferença destes componentes?vai me deixar na mão?! terei que fritar mais alguns neuronios então...mas vlw a mão Hugo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vai me deixar na mão?!

Bom, não entendi sua colocação, mas vamos lá mesmo assim...Começando:Utilizo SP em Sql Server, ai utilizo o Componente próprio de Stored mesmo para chama-la... acho melhor do que a query... mas ai é gosto mesmo!Não possuo muita experiencia em dbexpress e nem em FB, mas vamos tentando, ñ é???Alias, ninguem nasceu sabendo, então vamos lá...Estamos aqui para ajudar.bom, para que serve essa stored???o que você pretende fazer com ela????aguardo resposta!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ela serve para calcular tudo que um cliente gastou, originalmente ela estava assim:begin TOTAL = 0; VENCIDO = 0; VENCIDO_TRF_ICMS = 0; AVENCER = 0; PAGO = 0; DESCONTO = 0; JUROS = 0; For Select VALOR, PGTO_VIA, DT_VCTO, VALOR_PGTO, VALOR_DESC, VALOR_JUROS From DUPLICATAS Where EMPRESA_ID = :EMPRESA and LANCA_ID = :LANCA and CLIENTE_ID = :CLIENTE Into :vVALOR, :vPAGTO_VIA, :vDT_VCTO, :vVALOR_PGTO, :vVALOR_DESC, :vVALOR_JUROS do begin vDATA_BASE = CURRENT_DATE -1; /* Enquanto for Domingo ou Sábado */ while((extract(weekday from vDATA_BASE ) = 0) or (extract(weekday from vDATA_BASE ) = 6)) do vDATA_BASE = vDATA_BASE -1; TOTAL = TOTAL + vVALOR; /* Vencido */ if ((:vDT_VCTO < :vDATA_BASE) and ((:vVALOR_PGTO is null) or (:vVALOR_PGTO = 0))) then begin if (vPAGTO_VIA = 'Transferência ICMS') then VENCIDO_TRF_ICMS = VENCIDO_TRF_ICMS + :vVALOR; else VENCIDO = VENCIDO + :vVALOR; end /* A Vencer */ else if ((:vDT_VCTO >= :vDATA_BASE) and ((:vVALOR_PGTO is null) or (vVALOR_PGTO = 0))) then AVENCER = AVENCER + :vVALOR; else begin PAGO = PAGO + :vVALOR_PGTO ; DESCONTO = DESCONTO + :vVALOR_DESC; JUROS = JUROS + :vVALOR_JUROS; end end Suspend;endmas agora preciso fazer este mesmo cálculo para os fornecedores, e gostaria de deixar na mesma SP, pois não seria legal copiar todo o código e ter uma outra procedure por causa de uma linha de restrição diferente...então modifiquei ela assim:begin TOTAL = 0; VENCIDO = 0; VENCIDO_TRF_ICMS = 0; AVENCER = 0; PAGO = 0; DESCONTO = 0; JUROS = 0; COMANDO = 'Select VALOR, PGTO_VIA, DT_VCTO, VALOR_PGTO, VALOR_DESC, VALOR_JUROS From DUPLICATAS Where EMPRESA_ID = ' || :EMPRESA || ' and LANCA_ID = ' || :LANCA; if (:FORNECEDOR > 0) then COMANDO = COMANDO || ' and FORNECEDOR_ID = ' || :FORNECEDOR; else COMANDO = COMANDO || ' and CLIENTE_ID = ' || :CLIENTE; For execute statement COMANDO Into :vVALOR, :vPAGTO_VIA, :vDT_VCTO, :vVALOR_PGTO, :vVALOR_DESC, :vVALOR_JUROS do begin vDATA_BASE = CURRENT_DATE -1; /* Enquanto for Domingo ou Sábado */ while((extract(weekday from vDATA_BASE ) = 0) or (extract(weekday from vDATA_BASE ) = 6)) do vDATA_BASE = vDATA_BASE -1; TOTAL = TOTAL + vVALOR; /* Vencido */ if ((:vDT_VCTO < :vDATA_BASE) and ((:vVALOR_PGTO is null) or (:vVALOR_PGTO = 0))) then begin if (vPAGTO_VIA = 'Transferência ICMS') then VENCIDO_TRF_ICMS = VENCIDO_TRF_ICMS + :vVALOR; else VENCIDO = VENCIDO + :vVALOR; end /* A Vencer */ else if ((:vDT_VCTO >= :vDATA_BASE) and ((:vVALOR_PGTO is null) or (vVALOR_PGTO = 0))) then AVENCER = AVENCER + :vVALOR; else begin PAGO = PAGO + :vVALOR_PGTO ; DESCONTO = DESCONTO + :vVALOR_DESC; JUROS = JUROS + :vVALOR_JUROS; end end Suspend;endnão conheço nada de SP, me falaram que com o execute statment eu conceguiria, então pesquisei para saber como usá-lo, porém o erro me matou!! não sei o que pode estar acontecendo.o pior é que ainda não descobri nada de útil! estou bem perdido!vlw pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehe

 

sei lá, queria fazer assim

 

mas quando estava para desistir meu colega descobriu o problema...

 

a variável VPAGTO_VIA estava como timestamp na SP e datetime no banco! aí o erro!

 

vlw a força.

 

e malz aí pelo post repetido.

 

você eh gente fina, gostei de você http://forum.imasters.com.br/public/style_emoticons/default/natal_laugh.gif

 

td de bom e até a próxima

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.