Jump to content
Fórum Script Brasil
  • 0

Problema ao Alterar Procedure pela aplicação – Banco Firebird / IBExpert


prodelfirebird
 Share

Question

Pessoal, estou com essa dificuldade, quando tento alterar a procedure pela aplicação, passando a seguinte DDL:

(Procedure reduzida para não ocupar muito espaço – Não ligue pra lógica, que aqui eu entendo, rsrs)

 

 

 

SET TERM ^ ;
ALTER PROCEDURE  P_MOVIMENTO (
    CODIGO VARCHAR(10),
    DT_INICIO DATE,
    STATUS INTEGER)
RETURNS ( MOV_TOTAL NUMERIC(20,5))
AS
DECLARE VARIABLE  VALOR_TEMP NUMERIC(10,4);
BEGIN
        MOV_TOTAL = 0.00;
  BEGIN
    IF (STATUS = ) THEN  /* HABILITADO*/
      BEGIN
        /* CALCULO TOTAL MOVIMENTADO */
        SELECT SUM(MT.QTDE * M.VALOR_UNIT)
          FROM MOV_MATERIAL   MT
            LEFT JOIN MATERIAIS M ON (MT.COD_MAT = M.CODIGO)
            LEFT JOIN DER_RELAC DR ON (MT.COD_DOCTO = DR.CODIGO)
          WHERE MT.CONTA_DECL = : CODIGO
               AND MT.CONTA_DECL IS NOT NULL
               AND MT.COD_DOCTO IS NOT NULL
               AND DR.DATA < :DT_INICIO
          INTO :VALOR_TEMP;                          /*    <-- Problema está ocorrendo aqui   */
        IF (VALOR_TEMP IS NULL) THEN VALOR_TEMP = 0.00;
        MOV_TOTAL = VALOR_TEMP;
        /* Continua os cálculos para outros status  .... */
      END
  END
END^
SET TERM ; ^

 

 

No código da aplicação eu uso o ExecQuery do TIBSQL do componente InterBase para passar a DDL para o banco, mas quando chega na linha “INTO :VALOR_TEMP;” dá o seguinte erro: 

        Dynamic SQL Error
      - SQL error code = -104
      - Token unknown - line 32, char 16
      - ? 

 

 

Para resolver esse problema, já tentei fazer as seguintes ações:

- “Dropar” a procedure (sem depedência de outras procedures) e criá-la novamente.

- Paramcheck = false

- Usar o TIBScript ao invés do TIBSQL, mas não tem no componente Interbase da versão que uso.

 

 

Até agora não consegui resolver o problema.

Uso Delphi 7 no desenvolvimento da aplicação e Banco Firebird 1.5 com IBExpert.

 

 

Alguém poderia me sugerir algo?

 

AVISO: Dúvidas devem ser postadas no forum principal ( Delphi ) e não no forum ( Tutoriais  Delphi ) onde somente deve ter códigos prontos .. ok ?

Edited by Jhonas
Regras do Forum
Link to comment
Share on other sites

13 answers to this question

Recommended Posts

  • 0

você recomenda que eu exclua o post daqui e publique no forum principal?

se voce não percebeu seu tópico já foi movido de lugar

veja qual é o valor que esta sendo passado no parametro VALOR_TEMP

outra forma de testar a sua select é atraves do aplicativo MYSQL_Front que voce pode baixar da net

https://www.google.com.br/search?q=mysql_front+downalod&ie=utf-8&oe=utf-8&client=firefox-b&gfe_rd=cr&ei=eWlIV-bAMtDK8gfhrpvwBQ#q=mysql+front+download

abraço

Link to comment
Share on other sites

  • 0

Jhonas, bom dia!

Os valores que estão sendo passados pela aplicação como parâmetros são CODIGO, DT_INICIO e STATUS.

A variável VALOR_TEMP é uma variável local e não é passada pela aplicação.Ela é usada para auxiliar nos cálculos que são feitos pela procedure.

Ela não está sendo iniciada, pois eu não estou usando a procedure para fazer os cálculos.

Eu só quero alterar o conteúdo da procedure.

 

Será que para alterar a procedure é necessário iniciar (instanciar) a procedure?

Tipo ... 

DECLARE VARIABLE VALOR_TEMP NUMERIC (10,4);

BEGIN

MOV_TOTAL = 0.00;

VALOR_TEMP = 0.00;  // <-- Iniciando a variável local

        BEGIN

               IF (STATUS = 0) ..... ....  // etc ...

 

Será que seria essa a solução Jhonas?

 

Link to comment
Share on other sites

  • 0
Dynamic SQL Error
      - SQL error code = -104
      - Token unknown - line 32, char 16
      - ? 

Na verdade, o erro se refere a construção da sentença na select ... existe um simbolo desconhecido na sentença

o char 16 é um Data Line Escape ( linha de fuga de dados  )

para tirar a dúvida, delete toda a senteça e a refaça ( não copie e cole .. digite a setença novamente ) e veja se acontece novamente o mesmo erro

abraço

Link to comment
Share on other sites

  • 0
Eu não estou em casa agora para fazer o teste que você recomendou. Assim que for possível, eu faço o teste e posto aqui...


Mas só pra te informar ... 

- Token unknown - line 32, char 16   // Linha 32, caracter 16

Essa parte do erro, dá exatamente no " : " que vem antes da variável VALOR_TEMP ...

 

Será que o problema é no " : "  ou em alguma outra parte da sentença Select ?

Link to comment
Share on other sites

  • 0

Boa noite ... desculpe a demora (ocupado com outros lances aqui) ... 

Fiz os testes ... não deu certo.

 

No código da aplicação que uso para alterar a procedure, eu uso o componente IBSQL e o ExecQuery.

Troquei pelo componente IBScript e ExecuteScript, mas ainda continua dando o mesmo erro.

Link to comment
Share on other sites

  • 0

voce tentou refazer a senteça aos poucos e ir testando até que o erro aconteça ?

exemplo .... coloque a senteça ate aqui e teste

  SELECT SUM(MT.QTDE * M.VALOR_UNIT)
          FROM MOV_MATERIAL   MT
            LEFT JOIN MATERIAIS M ON (MT.COD_MAT = M.CODIGO)
            LEFT JOIN DER_RELAC DR ON (MT.COD_DOCTO = DR.CODIGO)
          WHERE MT.CONTA_DECL = : CODIGO

se não der erro, va colocando a proxima linha, e teste novamente .... até o final da senteça 

como eu falei, no MYSQL_Front  voce pode testar a sentença fora do programa

abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...