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 29-01-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Ampliar una tabla

Buenos días de nuevo.

A ver si alguien me echa un cable, pues tengo una tabla funcionando en un programa y necesito ampliarla con un campo nuevo. Hasta aquí todo correcto alter, add etc y a correr.
El problema se me presenta cuando mando el ejecutable nuevo actualizado con los campos en el modulo de datos, pero la tabla del receptor no tiene estos campos.
Como puedo hacer para comprobar si los campos existen en la tabla?
En caso afirmativo no ejecuta la consulta de creacion de campos y en caso negativo si la ejecuta.

He pensado en hacer este proceso en el oncreate del form principal, no se si es lo correcto.

Gracias

Josep
Responder Con Cita
  #2  
Antiguo 29-01-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola

Puedes utilizar las tablas de sistema, que te informarán de las tablas que tiene la base de datos.

De esta forma sabrás si tienes todas las tablas y campos que debería.

http://www.firebirdfaq.org/faq174/

Para obtener una lista de todas las tablas :

select rdb$relation_name
from rdb$relations
where rdb$view_blr is null
and (rdb$system_flag is null or rdb$system_flag = 0);

Para obtener una lista de todas las tablas, junto a sus campos :

select f.rdb$relation_name, f.rdb$field_name
from rdb$relation_fields f
join rdb$relations r on f.rdb$relation_name = r.rdb$relation_name
and r.rdb$view_blr is null
and (r.rdb$system_flag is null or r.rdb$system_flag = 0)
order by 1, f.rdb$field_position;

Hacer esta comprobación en el OnCreate, antes de empezar a cargar más datos, te debería funcionar perfectamente.

Salutacions.
Responder Con Cita
  #3  
Antiguo 29-01-2010
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.285
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
Si esta situación se va a dar más veces, yo te recomiendo que guardes en la Base de Datos (en alguna tabla tuya de configuración) la versión de la Base de Datos (campo tuyo).

De forma que puedes automatizar eso para diferentes versiones.

A medida que vas añadiendo campos a las tablas y creas una nueva versión de tu programa, también modificas la versión de la Base de Datos. Cuando mandas un ejecutable nuevo al cliente, compruebas la versión que tiene él, la que vas a instalar tú y lanzas los cambios correspondientes.
__________________
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 01-02-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Buenos dias a todos.

He creado una consulta con los parametros que me indica guillotmarc para buscar las tablas que tengo en mi base de datos y recibo un mensaje de "Database not assigned" caundo hago consulta.close, consulta.open.

Alguna idea?

Gracias

Josep
Responder Con Cita
  #5  
Antiguo 01-02-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola Josep.

El mensaje ya te debería haber dado una pista, parece ser que tu consulta no la has enlazado a la base de datos. Tienes que añadir un objecto Database o Connection (depende de los componentes que uses) apuntando a tu base de datos.

Salut.
Responder Con Cita
  #6  
Antiguo 01-02-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Tengo un componente IBQuery enlazado con la base de datos y un Data Source con este IBQuery.

No se si es el componente idoneo, si ejecuto la consulta en IBConsole me devuelve una tabla con los datos correctos.

Josep
Responder Con Cita
  #7  
Antiguo 01-02-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Si utilizas IBX, te faltan el IBDatabase y el IBTransaction (o bien los tienes, pero no están enlazados entre ellos con las propiedades Database y Transaction del Query).

Salutacions.
Responder Con Cita
  #8  
Antiguo 01-02-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
El IBDatabase y el IBTransaction están en el Modulo de Datos

En la consulta pongo la ruta de acceso al database.

Estoy encallado.

Josep
Responder Con Cita
  #9  
Antiguo 01-02-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Ya no me da error, el error estaba en que creaba antes el Form Inici que el Modulo de datos y claro...

Incorrecto
Código Delphi [-]
 
Application.CreateForm(TF_Inici, F_Inici);
Application.CreateForm(TF_ModulDades, F_ModulDades);

Correcto
Código Delphi [-]
 
Application.CreateForm(TF_ModulDades, F_ModulDades);
Application.CreateForm(TF_Inici, F_Inici);

Ahora que ya no falla es cuando debo comprobar si la tabla o campos existen y si no existen los cree y si existen no haga nada.

El titulo de la columna, me sirve para esta comprobación?

Josep
Responder Con Cita
  #10  
Antiguo 01-02-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Quisiera conservar en un Dataset las tablas y en otro las tablas y los campos pero no lo consigo.

Con el código enviado por guillotmarc en IBConsole funciona pero en Delphi , cuando quiero crear los campos en la tabla me dice que error Token unknow, line 2 char 1 from.

Josep
Responder Con Cita
  #11  
Antiguo 01-02-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola Josep.

¿ Como creas los campos ?, ¿ con un ALTER TABLE ?. Piensa que no puedes poner más de una sentencia SQL en un Query.

Así que si tienes que añadir dos campos, no puedes hacerlo de una tacada, sino que primero añades uno, y después el otro.

En todo caso, si te sigue fallando, dínos la sentencia SQL que tienes cuando te da ese error.

Salutacions.
Responder Con Cita
  #12  
Antiguo 01-02-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Hola de nuevo, coloco el siguiente código en una sql y al hacer sql.close, sql.open me da el error del token unknow.

Código SQL [-]
 
select rdb$relation_name
from rdb$relations
where rdb$view_blr is null
and (rdb$system_flag is null or rdb$system_flag = 0);

Si este código lo coloco en el IBConsole me saca una tabla con los campos.
Me gustaría poder guardar estos campos en una tabla para poder utilizarlos posteriormente para tener la descripcion de las tablas con nombre tabla, descripcion, para comprobaciones, etc.

Josep
Responder Con Cita
  #13  
Antiguo 01-02-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Lo siento, mi experiencia con IBX es muy limitada, a ver si alguien que haya trabajado con estos componentes te puede ayudar.

NOTA: En componentes parecidos, en lugar de hacer un Open, había que hacer un Excecute, ExecSQL, ExecQuery, o algo por el estilo.

Salutacions.
Responder Con Cita
  #14  
Antiguo 01-02-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Ok Marc, seguire investigando, muchas gracias por tu tiempo

Josep
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
Ampliar memoria BDE jacapu Conexión con bases de datos 2 14-01-2010 18:24:31
Ampliar aplicacíon C/S a Internet nfrfabian Internet 4 27-05-2007 16:34:51
Impedir ampliar y minimizar el form de un programa Leomedellin Varios 4 04-04-2005 19:02:54
Ampliar un campo en un dbgrid hogol Varios 1 21-11-2003 16:02:40
ampliar visíon del ancho del TQRPreview HombreSigma Impresión 2 18-09-2003 19:34:23


La franja horaria es GMT +2. Ahora son las 06:05:19.


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