Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-01-2007
Avatar de Io
[Io] Io is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: San Fernando (Cádiz)
Posts: 259
Poder: 19
Io Va por buen camino
Stored Procedure,Triggers

Saludos al Foro y Feliz Año Nuevo.

Vamos con la primera pregunta del año.

Tengo una pega y no encuentro ni explicación ni solución, haber si me ayudan a ver la Luz.
Entorno: D6, FB15 ,componentes interbase.

Inicialmente mediante un ibQuery desde delphi podía generar una nueva base
de datos, creando tablas dominios, indices, Stored Procedure (SP),Triggers, en fin todo era felicidad......

Pero llego el día en que tuve que realizar una modificación en un SP, mediante un ibQuery realicé un RECREATE, y me devolvio el siguiente
error:

SQL error = 104
Token unknown -line 1,char xxx
?'. Proc.......

Es lógico pensar que me equivoque.
Tome la desición de borrar y crear el SP para evitar volver a utilizar RECREATE. Comenzo el calvario, podía perfectamente borrar el SP, pero
al crearlo me devolvía el mismo error (Cambia el char), dejaba el cuerpo
del SP vacío y me lo creaba, pero, si introducía cualquier instrucción el
error salta y no lo crea. Mi estado de crisis aumenta cuando utilizo código
de la SP original (sin tocar) y me devuelve el mismo error.

Cuando hago un Copy-Paste del SP desde delphi al editor sql del ibExpert
y lo ejecuto funciona perfectamente.
Lo mismo me ha pasado al modificar un trigger, lo he conseguido desde
ibExpert, aunque originalmnte lo podia hacer desde delphi (Creación del trigger).

No se que pasa, quizás sea un problema de los componentes de interbase....

Espero no haber liado mucho la pregunta.

Saludos
Responder Con Cita
  #2  
Antiguo 05-01-2007
Avatar de StartKill
StartKill StartKill is offline
Miembro
 
Registrado: ene 2004
Posts: 299
Poder: 21
StartKill Va por buen camino
Saludos compañero,

Has resuelto tu poblema?

Te comento que me ocurrio lo mismo.... y es como tu dices, el problema era los componentes. (habia actualizado por otra version).

Your friend,

StarKill
Lima-Perú
Responder Con Cita
  #3  
Antiguo 05-01-2007
Avatar de Io
[Io] Io is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: San Fernando (Cádiz)
Posts: 259
Poder: 19
Io Va por buen camino
Buenasssssssssss

Lo he solucionado a medias de momento.
Formateé el disco duro y volvi a instalar delphi y todo lo demas. He conseguido que la aplicación que antes genaraba bien las Bases de datos, lo vuelva a hacer, pero todavía no he conseguido cambiar el cuerpo del Trigger y Sp desde una aplicación.
Seguiré probando (Todavía estamos a principio de año )

Saludos
Responder Con Cita
  #4  
Antiguo 06-01-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Supongo que metes el código DDL en un query tal que así:
Código SQL [-]
/*===========================================================================*/
/*Metadata Extract performed 06-ene-2007 20:47                               */
/*===========================================================================*/

/*===========================================================================*/
/*Connect to Database                                                        */
/*===========================================================================*/
connect 'blarblabla0.FDB' user 'SYSDBA' blabla;



/*===========================================================================*/
/*Stored Procedure Definitions                                               */
/*===========================================================================*/

alter procedure BlaBlas (EJERCICIO integer, TABLA varchar(40))
returns (NUMERO integer)
as
DECLARE VARIABLE NTEMP INTEGER;
Begin

SELECT COUNT(EJERCICIO) FROM SYS_EJERCICIOS

blabla
blabla

suspend;

End
^


commit work^
set autoddl on^
set term ;^

y posteriormente lo ejetutas con Query.ExecSQL
Si es así, y según el error que aportas, la sintaxis es errónea.

Mira por si acaso en ese procedimiento que quieres ejecutar, tal vez quieras utilizar una variable tipo DATE y dependiendo del Dialecto de tu BD, a lo mejor no te lo permite y tendría que utilizar Timestamp.
Suele ser un error muy común..
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #5  
Antiguo 06-01-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por _Io
Buenasssssssssss

Lo he solucionado a medias de momento.
Formateé el disco duro y volvi a instalar delphi y todo lo demas. He conseguido que la aplicación que antes genaraba bien las Bases de datos, lo vuelva a hacer, pero todavía no he conseguido cambiar el cuerpo del Trigger y Sp desde una aplicación.Seguiré probando (Todavía estamos a principio de año )Saludos
Comentario al margen sobre el tema:

Me impresiona, sorprende, confunde, extraña, fascina, desconcierta, me deja perplejo la "facilidad" con que muchos solucionan cualquier tipo de problema informático.
Responder Con Cita
  #6  
Antiguo 07-01-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Casimiro, no ha dicho explicitamente que formateando se haya quitado el error, simplemente ha dicho que ha formateado y que parcialmente ha solucionado el error... puede no que estén las dos cosas íntimamente relacionadas .

Claro, como tú no usas windows, no sabes que hay que formatearlo cada cierto tiempo

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 07-01-2007
Avatar de Io
[Io] Io is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: San Fernando (Cádiz)
Posts: 259
Poder: 19
Io Va por buen camino
Saludos a todos.
Efectivamente, el formatear el disco no es una solución. Pero era algo que tenía pendiente y aproveche el momento y encontré esa solución parcial.

En contestación a ArdiIIa, el código que utilizo es:

Código:
const

  SP_AE_CLI_NO_HAB =
  'CREATE PROCEDURE SP_AE_CLI_NO_HAB '+
         '(ALB CHAR(6),FAC CHAR(6),FECHAFAC DATE,COD2 CHAR(10)) AS '+
  '  DECLARE VARIABLE CODFAC CHAR(6); '+
  '  DECLARE VARIABLE CLI CHAR(6); '+
  '  DECLARE VARIABLE AGE CHAR(6); '+
  '  DECLARE VARIABLE ALM CHAR(6); '+
  '  DECLARE VARIABLE PU CHAR(6); '+
  '  DECLARE VARIABLE FPAGO DATE; '+
  '  DECLARE VARIABLE COB NUMERIC(16,2); '+
  '  DECLARE VARIABLE SAL NUMERIC(16,2); '+
  '  DECLARE VARIABLE BASI NUMERIC(16,2); '+
  '  DECLARE VARIABLE IV NUMERIC(16,2); '+
  '  DECLARE VARIABLE R NUMERIC(16,2); '+
  '  DECLARE VARIABLE TOT NUMERIC(16,2); '+
  '  DECLARE VARIABLE PA SMALLINT; '+
  '  DECLARE VARIABLE REI SMALLINT; '+
  '  DECLARE VARIABLE FECHAXX DATE; '+
  '  DECLARE VARIABLE AUX VARCHAR(60); '+
  'BEGIN '+

//   SE TOMA  ALBARÁN
  '  SELECT CODCLIENTE,CODAGENTE,CODALMACEN,PUESTO,FECHAPAGO,COBRADO,SALDO,BASEIMP,IVA,RE,TOTAL,PAGADO,'+
            'REGIMENIVA,CODFACTURA '+
  '  FROM '+NOMBRE_DOCUMENTOS+' ' +
  '  WHERE CODALBARAN = :ALB '+
  '  INTO :CLI,:AGE,:ALM,:PU,:FPAGO,:COB,:SAL,:BASI,:IV,:R,:TOT,:PA,:REI,:CODFAC; '+

  '  IF (:FAC <> :CODFAC) THEN '+
  '  BEGIN '+

//   SE ACTUALIZA FACTURA
  '    UPDATE '+NOMBRE_FACTURAS+' ' +
  '    SET ' +
  '    CODCLIENTE = :CLI, '+
  '    CODAGENTE = :AGE, '+
  '    CODALMACEN = :ALM, '+
  '    PUESTO = :PU, '+
  '    HORA = current_time, '+
  '    REGIMENIVA = :REI, '+
  '    IMPRIMIDO = 0 '+
  '    WHERE CODFACTURA = :FAC; '+

//   SE ACTUALIZA ALBARAN
  '    UPDATE '+NOMBRE_DOCUMENTOS+' ' +
  '    SET ' +
  '    CODFACTURA = :FAC, '+
  '    FECHAFAC = :FECHAFAC '+
  '    WHERE CODALBARAN = :ALB; '+

//   SE ACTUALIZA MOVIMIENTOS
  '    UPDATE '+NOMBRE_MOVIMIENTOS+' ' +
  '    SET ' +
  '    CODFACTURA = :FAC, '+
  '    FECHAFAC = :FECHAFAC '+
  '    WHERE CODALBARAN = :ALB; '+

//   SE ACTUALIZA CNH
  '    UPDATE '+NOMBRE_CNH_S+' ' +
  '    SET ' +
  '    CODFACTURA = :FAC '+
  '    WHERE CODALBARAN = :ALB; '+
  '  END '+

  '  FECHAXX = current_date; '+
  '  AUX = '+''''+'PAGO FAC. '+''''+'|| :FAC || '+''''+'/'+''''+' || EXTRACT( year from :FECHAFAC); '+

// SE ACTUALIZA FACTURA
  '  UPDATE '+NOMBRE_FACTURAS+' ' +
  '  SET ' +
  '  FECHAPAGO = :FECHAXX, '+
  '  COBRADO = :TOT, '+
  '  SALDO = 0, '+
  '  BASEIMP = :BASI, '+
  '  IVA = :IV, '+
  '  RE = :R, '+
  '  TOTAL = :TOT, '+
  '  PAGADO = 1 '+
  '  WHERE CODFACTURA = :FAC; '+

//  SE BORRA APUNTES COBROS EXISTENTE
  '  DELETE FROM '+NOMBRE_COBROS+' ' +
  '  WHERE CODIGO = :FAC '+
  '  AND CODIGO2 = :COD2 '+
  '  AND TIPO = 1; '+

//  SE INSERTA APUNTES COBROS
  '  INSERT INTO '+NOMBRE_COBROS+' '+
  ' (CODIGO,CODIGO2,EMISORCOB,TIPO,FECHA,CONCEPTO,IMPORTE,FILA,CODCONCEPT,FECHADOC,CODCLIENTE,CODAGENTE) '+
  '  VALUES (:FAC,:COD2,:COD2,1,:FECHAXX,:AUX,:TOT,1,'+''''+'000000'+''''+',:FECHAFAC,:CLI,:AGE); '+

//  SE ACTUALIZA CAJA
  ' EXECUTE PROCEDURE SP_ACTUALIZACAJA :FECHAXX; '+

  'END ';





procedure TForm2.Button3Click(Sender: TObject);
begin
  ibT1.StartTransaction;
  try
    ibQMovimientos.SQL.Clear;
   ibQMovimientos.SQL.Add(SP_AE_CLI_NO_HAB);
    application.ProcessMessages;

    ibQMovimientos.ExecSQL;

    ibt1.Commit;
    showmessage('Ok Crea');
  except
    if ibt1.InTransaction then
      ibt1.Rollback;
    showmessage('Error Crea');
  end;

end;
ibQMovimientos, es un componente TQuery, que ha sido conectado a la base de datos mediante un componte TibDatabase.

los identificadores como "NOMBRE_COBROS", son constantes que continen el nombre de la tabla.

Este código me genera el error que os he dicho, pero si lo ejecuto desde el ibExpert me funciona bien (lógicamente cambiando las constantes por los nombres de las tablas)

No utilizo el comando supend, ni tampoco utilizo el signo ^.

Saludos
Responder Con Cita
  #8  
Antiguo 08-01-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
DECLARE VARIABLE FPAGO DATE;
DECLARE VARIABLE FECHAXX DATE;
Pues efectivamente utilizas el tipo date, y tal como te comenté, dependiendo del dialecto de tu BD, esto te podría generar problemas a la hora de modificar el procedure evitándose utilizando el tipo Timestamp.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #9  
Antiguo 08-01-2007
Avatar de Io
[Io] Io is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: San Fernando (Cádiz)
Posts: 259
Poder: 19
Io Va por buen camino
Muchas gracias.
El dialecto que utilizo es el 3.
En cuanto pueda voy hacer las pruebas para comprobar esto.

Ya te comentaré.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ocultar código de Stored Procedures y Triggers en FireBird... jncrls Firebird e Interbase 4 08-01-2007 16:51:52
Problema con stored procedure dape Firebird e Interbase 11 20-10-2005 05:13:23
Se puede en stored procedure? Abelardo Firebird e Interbase 0 09-04-2004 00:00:48
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33


La franja horaria es GMT +2. Ahora son las 07:33:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi