Ir para conteúdo
Fórum Script Brasil
  • 0

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


prodelfirebird

Pergunta

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 ?

Editado por Jhonas
Regras do Forum
Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...