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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-04-2011
Avatar de Young
Young Young is offline
Miembro
 
Registrado: abr 2006
Ubicación: San Felipe, Chile
Posts: 86
Poder: 18
Young Va por buen camino
Red face Script SQL para actualizar una base de datos

Hola amigos.

Me nace la necesidad de actualizar una base de datos de una aplicación, el asunto es que quiero hacerlo mediante un script al estilo de SQL Server, en donde pueda revisar las tablas y campos para poder actualizar (por lo general agregar campos, vistas, procedimientos almacenados o una tabla) .

Este script se descargaría mediante una rutina de actualización de mi aplicación para luego ejecutarla con isql en el equipo.

La pregunta es:

¿Se puede hacer esto con firebird o necesito crear un proceso más engorroso para hacer la actualización?

o pregunto de otra forma:

¿Existe una mejor forma de lograr esto?

Gracias anticipadas.
Responder Con Cita
  #2  
Antiguo 20-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No sé cómo lo haces con la base de datos de la que hablas, pero ten en cuenta que es SQL, o sea, igual, puedes crear un script, obviamente.
Responder Con Cita
  #3  
Antiguo 20-04-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
En una empresa en la que trabajaba se hacía algo similar a esto. En cada actualización iba incluído (en tu caso se puede descargar de Internet) los Scripts para actualizar la Base de Datos.
Es decir, cada actualización llevaba su Script.

Al actualizar se comparaba la versión actual con la nueva y se ejecutaban los Scripts necesarios entre las 2 versiones.

Si pasabas de la 1 a la 3, se ejecutaba por orden, el Scrip de la 2 y de la 3.
Quien pasaba de la 2 a la 3, sólo ejecutabla el script de la 3.

El proceso es sencillo, aunque laborioso.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 20-04-2011
Avatar de Young
Young Young is offline
Miembro
 
Registrado: abr 2006
Ubicación: San Felipe, Chile
Posts: 86
Poder: 18
Young Va por buen camino
Creo que encontré la respuesta a la pregunta que NO supe plantear bien... por eso ruego sus disculpas. En el fondo necesitaba saber por ejemplo, si un sentencia if consultando por la existencia de una tabla podia ir fuera de un procedimiento almacenado... la respuesta es no, pero usando EXECUTE BLOCK se soluciona.

Código SQL [-]
SET TERM !! ;
EXECUTE BLOCK AS BEGIN if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EMPLOYEE')) then
      execute statement 'create table employee ( id integer );'; END!! 
SET TERM ; !!


Gracias.
Responder Con Cita
  #5  
Antiguo 21-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Muy interesante, nunca he usado esa posibilidad, ni recuerdo haber leido sobre ella.
Responder Con Cita
  #6  
Antiguo 21-04-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Intenta no complicarte mucho la vida, respeta el KISS (Keep It Simple, Stupid).

Muchos de los manejadores de BBDD (IBexpert, flamerobin, etc) pueden ir almacenando los cambios que se le van haciendo a una base de datos con el tiempo, así que, en cada actualización, solo debes pillar ese "log en sql" que va haciendo el manejador y lanzarlo en tu sistema de actualización.

No necesitas comprobar si tal tabla o cual existe, haz las cosas de forma ordenada y sé consecuente, verás que te quitas muchos problemas de en medio. Quiero decir, "si en la versión anterior no existía la tabla empleados, no hay que andar testeando, ya me estoy basando en el número de versión de la BBDD (por ejemplo)".

Saludos y suerte.
__________________
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 21-04-2011
Avatar de Young
Young Young is offline
Miembro
 
Registrado: abr 2006
Ubicación: San Felipe, Chile
Posts: 86
Poder: 18
Young Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
Intenta no complicarte mucho la vida, respeta el KISS (Keep It Simple, Stupid).

Muchos de los manejadores de BBDD (IBexpert, flamerobin, etc) pueden ir almacenando los cambios que se le van haciendo a una base de datos con el tiempo, así que, en cada actualización, solo debes pillar ese "log en sql" que va haciendo el manejador y lanzarlo en tu sistema de actualización.

No necesitas comprobar si tal tabla o cual existe, haz las cosas de forma ordenada y sé consecuente, verás que te quitas muchos problemas de en medio. Quiero decir, "si en la versión anterior no existía la tabla empleados, no hay que andar testeando, ya me estoy basando en el número de versión de la BBDD (por ejemplo)".

Saludos y suerte.
Tienes toda la razón, esta semana no estoy muy brillante... bueno casi nunca.

Gracias a todos.
Responder Con Cita
  #8  
Antiguo 21-04-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Cita:
Empezado por Young Ver Mensaje
Creo que encontré la respuesta a la pregunta que NO supe plantear bien... por eso ruego sus disculpas. En el fondo necesitaba saber por ejemplo, si un sentencia if consultando por la existencia de una tabla podia ir fuera de un procedimiento almacenado... la respuesta es no, pero usando EXECUTE BLOCK se soluciona.

Código SQL [-]SET TERM !! ; EXECUTE BLOCK AS BEGIN if (not exists(select 1 from rdb$relations where rdb$relation_name = 'EMPLOYEE')) then execute statement 'create table employee ( id integer );'; END!! SET TERM ; !!



Gracias.
Vaya, que interesante. Nunca se me había ocurrido utilizar el EXECUTE BLOCK de esta forma (en realidad nunca utilizo esa sentencia porqué el dbExpress de Delphi 6 no la acepta).

Para las actualizaciones utilizo los Scripts de IBExpert, precisamente porqué tienen extensiones para realizar este tipo de condicionales. Pero si con esta construcción se puede utilizar un Script estándar, aceptado directamente por el motor, mejor que mejor.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #9  
Antiguo 21-04-2011
Avatar de Young
Young Young is offline
Miembro
 
Registrado: abr 2006
Ubicación: San Felipe, Chile
Posts: 86
Poder: 18
Young Va por buen camino
Buenos días, quiero agregar otra interrogante al tema de actualizaciones de la base de datos. Supongamos que esta base de datos la atacan multiples usuarios, ¿es necesario o recomendable tener acceso exclusivo a la base de datos para actualizar algunas tablas, o podemos hacerlo mientras esten en uso?

La verdad que lo he hecho un par de veces mediante flamerobin de modificar una tabla, obviamente encomendándome a todos los santos para no tener algun problema. Alguno con más experiencia en este tema puede comentar al respecto.

Saludos.
Responder Con Cita
  #10  
Antiguo 21-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es necesario que no exista nadie más conectados a la base de datos, ten en cuenta que puedes estar haciendo modificaciones en tablas que estén usándose en ese momento y entonces no podrá actualizarse. Es lógico, aunque lo permita (que creo que no) no debe hacerse.
Responder Con Cita
  #11  
Antiguo 26-04-2011
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Si la cosa es manual usa ib experte Menu herramientas/database comparer el resto lo hace el solito. Si no es manual ya debes hacerlo mediante codigo.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #12  
Antiguo 26-04-2011
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por rastafarey Ver Mensaje
Si la cosa es manual usa ib experte Menu herramientas/database comparer el resto lo hace el solito. Si no es manual ya debes hacerlo mediante codigo.

Database comparer tiene sus componentes que te permiten realizar la comparación desde tu aplicación de mantenimiento de base de datos, programaticamente, transparente para el usuario, funciona muy bien.
Prque tienes una aplicación para realizar mantenimiento... verdad?
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #13  
Antiguo 08-07-2011
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Database comparer. Es una opcion de la aplicacion IBExpert. Eso fue lo que escribi.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #14  
Antiguo 08-07-2011
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por rastafarey Ver Mensaje
Database comparer. Es una opcion de la aplicacion IBExpert. Eso fue lo que escribi.
Tranquilo campeón... Tambien existe un set de componentes para Delphi muy buenos, database comparer, que permiten que el amigo realice de manera programática estas tareas.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Actualizar estructura de base de datos sin perder datos ManuelPerez Firebird e Interbase 8 20-10-2010 03:41:19
Error script creacion base de datos jorgegetafe MySQL 13 15-01-2008 22:46:23
actualización de base de datos desde script dandia28 Conexión con bases de datos 2 21-06-2007 03:01:53
Actualizar datos de una base de datos en un reporte Marymania Impresión 4 27-11-2006 20:47:32
Actualizar la Base de Datos. ramirezjl7 Firebird e Interbase 4 04-01-2005 09:44:51


La franja horaria es GMT +2. Ahora son las 18:48:40.


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