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 25-11-2008
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
Smile Actualizar la bd por internet

Uso D7 y Firebird.
He montado un sistema de actualizacion de la base de datos por internet.
He probado diversos paquetes de componentes y al final he optado por Zeos.
Este paquete tiene un componente para el manejo de script (ZSQLProcessor) que funciona muy bien.
Todas las modificaciones que voy realizando durante el desarrollo las voy anotando en un fichero de texto plano, las coloco en internet, se descargan desde el programa cliente y todo funciona bien.
El problema ha surgido cuando he tenido que actualizar o crear un procedimiento almacenado o un trigger, en ese momento ya no funcionan las actualizaciones. El problema es que los triggers o los procedimientos almacenados usan internamente ; como separadores, y como separador final el ^, por lo que el ZSQLProcessor ya no trabaja adecuadamente.

Alguien sabe como solucionar el problema

Un saludo
Responder Con Cita
  #2  
Antiguo 25-11-2008
cahp cahp is offline
Miembro
 
Registrado: may 2003
Ubicación: Alicante
Posts: 90
Poder: 21
cahp Va por buen camino
has probado con:

Código SQL [-]
SET TERM ^ ;

ALTER TRIGGER NOMBRE
 AS Declare variable I integer;
BEGIN 
I = 0; 
END
^

SET TERM ; ^

Saludos.
Responder Con Cita
  #3  
Antiguo 25-11-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Cita:
Empezado por cahp Ver Mensaje
has probado con:

Código SQL [-]
SET TERM ^ ;

ALTER TRIGGER NOMBRE
 AS Declare variable I integer;
BEGIN 
I = 0; 
END
^

SET TERM ; ^

Saludos.
Justo eso estaba por responder, además de que la propiedad DelimiterType del SQLProcessor debe ser dtSetTerm.


Saludos
Responder Con Cita
  #4  
Antiguo 25-11-2008
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
Si que lo he probado, pero el problema es cuando mezclo sentencias terminadas con ; con definiciones de triggers o procedimientos, por ejemplo

Código SQL [-]
CREATE TABLE TERMINOS (
    IDTERMINO    T_ID NOT NULL,
    TERMINO      T_TEXTO,
    IDPROVINCIA  T_ID,
    PROVINCIA    T_TEXTO
);

INSERT INTO TERMINOS (IDTERMINO, TERMINO, IDPROVINCIA, PROVINCIA) VALUES (1001, 'ALEGRIA-DULANTZI', 1, 'ALAVA');

SET TERM ^ ;

CREATE OR ALTER PROCEDURE CALCKGSPARTIDAS 
as
declare variable partidaid integer;
declare variable kgs numeric(10,2) = 0;
begin
  for select idpartida, sum(kgsaceituna) from recepcion
      group by idpartida
      into artidaid, :kgs
      do execute procedure kgspartidas(partidaid,kgs);
end
^

SET TERM ; ^

En este caso, no funciona

Un saludo
Responder Con Cita
  #5  
Antiguo 25-11-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Utiliza el terminador ^ para todo tu script


Código SQL [-]
SET TERM ^ ;
CREATE TABLE TERMINOS (    
IDTERMINO    T_ID NOT NULL,    
TERMINO      T_TEXTO,    
IDPROVINCIA  T_ID,    
PROVINCIA    T_TEXTO)^
 
INSERT INTO TERMINOS (IDTERMINO, TERMINO, IDPROVINCIA, PROVINCIA) 
VALUES (1001, 'ALEGRIA-DULANTZI', 1, 'ALAVA')^
 
CREATE OR ALTER PROCEDURE CALCKGSPARTIDAS as
declare variable partidaid integer;
declare variable kgs numeric(10,2) = 0;
begin
  for select idpartida, sum(kgsaceituna) 
       from recepcion
      group by idpartida
      into artidaid, :kgs
   do execute procedure kgspartidas(partidaid,kgs);
end^
 
SET TERM ; ^
acabo de hacer la prueba insertando un registro, creando una tabla , creando un trigger y creando un sp con un solo SQLPRocessor y todo bien.


Avisanos como te va.
Responder Con Cita
  #6  
Antiguo 26-11-2008
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
Question

¿Y como lo haces?

Yo he probado poniendo Delimiter = ^ y DelimiterType = dtSetTerm y no me funciona

Un saludo
Responder Con Cita
  #7  
Antiguo 26-11-2008
Avatar de boreg
boreg boreg is offline
Miembro
 
Registrado: oct 2007
Ubicación: México, México
Posts: 76
Poder: 17
boreg Va por buen camino
Cita:
Empezado por PacoPepe Ver Mensaje
¿Y como lo haces?

Yo he probado poniendo Delimiter = ^ y DelimiterType = dtSetTerm y no me funciona

Un saludo
el delimitador lo debes de indicar como ; o de plano dejalo vacío, supongo que por default lo toma como ;. Probé con delimitador ^ y, en efecto, no funciona. Resumiendo:
-set term ^; desde el principio de tu script
-set term ;^ al final de todo tu script
-^ al final de cada instruccion, excepto las contenidas en los SP's o trigger's, utiliza ;
-Delimiter = ;
-DelimiterType = dtSetTerm

cualquier duda avisanos.

Saludos

Última edición por boreg fecha: 26-11-2008 a las 19:11:57.
Responder Con Cita
  #8  
Antiguo 26-11-2008
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
Talking

Dejando Delimiter en blanco si que funciona.

Muchas gracias
Responder Con Cita
  #9  
Antiguo 26-11-2008
PacoPepe PacoPepe is offline
Miembro
 
Registrado: ene 2006
Ubicación: Córdoba, España
Posts: 86
Poder: 19
PacoPepe Va por buen camino
Resumiendo

-set term ^; desde el principio del script
-set term ;^ al final de todo el script
-^ al final de cada instruccion, excepto las contenidas en los SP's o trigger's, utiliza ;
-Delimiter = ''
-DelimiterType = dtSetTerm
-ParamsCheck = true

Delimiter hay que definirlo como '' mediante código, porque sino el componente al segundo intento lo vuelve a poner como ;

Un saludo a todos
Responder Con Cita
  #10  
Antiguo 28-11-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Yo he usado los componenetes de ib objects. Y ejecuto el script y no tenido ningun problemas.

si te das cuenta ibexpert tiene una opcion para conparar bases de datos luego que realiza las comparaciones te devuelve un script con las modificaciones la cual debes ejecutar sin ningun problemas. Bueno es el metodo mas sencillo y jamas he tendo problemas.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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
Como puedo actualizar el debian desde Internet georkis Linux 4 18-08-2008 16:34:56
Actualizar ejecutable por internet manolop Varios 4 26-06-2008 08:13:10
Actualizar .exe julian_ch Varios 15 19-11-2006 22:32:50
Actualizar de Fb 1.0.2 a Fb 1.5 Sergio J. Firebird e Interbase 5 07-04-2006 12:03:59
Actualizar Paradox desde Internet chozas Tablas planas 4 20-05-2003 20:25:03


La franja horaria es GMT +2. Ahora son las 22:48:15.


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