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 22-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Modificar Tablas desde Codigo

Hola amigos

tengo un problema. Hace un tiempo realice un sistema con Interbase,,, y ahora me piden una modificación.. como el sistema esta poblado... necesito agregar campos a una tabla en particular...y quisiera realizarlo desde delphi..

la siguiente sentencia me agrega el campo Pro_Precio a la tabla Producto, de tipo Integer y cuyo valor por Defecto es 0

Código SQL [-]
ALTER TABLE "Producto"
ADD "Pro_Precio" INTEGER
DEFAULT 0

mi problema esta en como ejecuto esa sentencia desde delphi... utilizo igualmente los IBQuery... o se necesita otro componente..

y para eliminar el campo estaria utilizando esto
Código SQL [-]
Alter Table "Producto" Drop "Pro_Precio"

gracias...
__________________
BlueSteel

Última edición por BlueSteel fecha: 22-11-2007 a las 20:41:00.
Responder Con Cita
  #2  
Antiguo 22-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
se me olvidada..

que debo preguntar si el campo existe(eso no se como hacerlo).... si es así, que no se cree... de lo contrario..que se cree

PS: utilice el componente IBQuery para ejecutarlo y me funciono... (sigo usando este mismo componente o debo utilizar otro?

Código Delphi [-]
Datos.IBQ_Edit.Close;
Datos.IBQ_Edit.SQL.Clear;
Datos.IBQ_Edit.SQL.Add('ALTER TABLE "Producto" ADD "Pro_Precio" INTEGER DEFAULT 0');
Datos.IBQ_Edit.ExecSQL;

donde Datos es un Form de tipo DataModule....IBQ_Edit, es un IBQuery
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 22-11-2007
Avatar de juanelo
juanelo juanelo is offline
Miembro
 
Registrado: sep 2007
Posts: 1.083
Poder: 18
juanelo Va por buen camino
Que tal,
Así preguntas por un campo de una tabla.

Código SQL [-]
Select RDB$FIELD_NAME from  RDB$RELATION_FIELDS
 where  RDB$RELATION_NAME="NOM_TABLA"  AND RDB$FIELD_NAME="NOMBRE_CAMPO"
order by RDB$FIELD_POSITION

Saludos
Responder Con Cita
  #4  
Antiguo 22-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
juanelo ya te ha dicho como averiguar por la existencia de dicho campo, asi que solo me queda decirte que me parece bien que uses el IBQuery para este caso, no veo cual pueda ser el problema .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 22-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Holas,... gracias


ejecute la sentencia que me dio juanelo.. y me da el siguiente error

[Error]
fmSQLEditor.Query:
Column does not belong to referenced table.Dynamic SQL Error.
SQL error code = -206.
Column unknown.
Producto.
[/Error]

la sentencia la ejecute desde monitor SQL de la sgte forma

Código SQL [-]
 
Select RDB$FIELD_NAME From RDB$RELATION_FIELDS
Where RDB$RELATION_NAME="Producto" AND RDB$FIELD_NAME="Pro_Precio"
__________________
BlueSteel
Responder Con Cita
  #6  
Antiguo 22-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
buscando por ahí.. encontre que la consulta debo realizarla con comillas simples y no dobles.. por lo que quedaría así

Código SQL [-]
Select RDB$FIELD_NAME From RDB$RELATION_FIELDS
Where RDB$RELATION_NAME='Producto' AND RDB$FIELD_NAME='Pro_Precio'

ahora tendria que ver como traspaso eso desde delphi, ya que si pongo la comilla simple me lo toma como error de programación (asume termino de linea)

alguien sabe cual es el comodin para solucionarlo....?

Código Delphi [-]
Datos.IBQ_Edit.Close;
Datos.IBQ_Edit.SQL.Clear;
Datos.IBQ_Edit.SQL.Add('Select RDB$FIELD_NAME From RDB$RELATION_FIELDS');
Datos.IBQ_Edit.SQL.Add('Where RDB$RELATION_NAME="Producto" AND RDB$FIELD_NAME='Pro_Precio'');
Datos.IBQ_Edit.SQL.Add('Order by RDB$FIELD_POSITION');
Datos.IBQ_Edit.Open;
__________________
BlueSteel
Responder Con Cita
  #7  
Antiguo 22-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Debes colocar comilla simple porque seguramente tu BD esta en Dialecto 3 .

En cuanto a lo de Delphi, usalo asi:

Código Delphi [-]
Datos.IBQ_Edit.Close;
Datos.IBQ_Edit.SQL.Clear;
Datos.IBQ_Edit.SQL.Add('Select RDB$FIELD_NAME From RDB$RELATION_FIELDS');
Datos.IBQ_Edit.SQL.Add('Where RDB$RELATION_NAME=''Producto'' AND RDB$FIELD_NAME=''Pro_Precio''');
Datos.IBQ_Edit.SQL.Add('Order by RDB$FIELD_POSITION');
Datos.IBQ_Edit.Open;

O tambien con la función QuotedStr, asi:

Código Delphi [-]
  Datos.IBQ_Edit.Close;
  Datos.IBQ_Edit.SQL.Clear;
  Datos.IBQ_Edit.SQL.Add('Select RDB$FIELD_NAME From RDB$RELATION_FIELDS');
  Datos.IBQ_Edit.SQL.Add('Where RDB$RELATION_NAME='+ QuotedStr('Producto') + ' AND RDB$FIELD_NAME='+QuotedStr('Pro_Precio'));
  Datos.IBQ_Edit.SQL.Add('Order by RDB$FIELD_POSITION');
  Datos.IBQ_Edit.Open;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 22-11-2007 a las 21:45:05. Razón: Agregar función con QuotedStr
Responder Con Cita
  #8  
Antiguo 22-11-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por BlueSteel Ver Mensaje
ahora tendria que ver como traspaso eso desde delphi, ya que si pongo la comilla simple me lo toma como error de programación (asume termino de linea)

alguien sabe cual es el comodin para solucionarlo....?
Y si usas el QuotedStr, de esta forma

Código Delphi [-]
Datos.IBQ_Edit.SQL.Add('Where RDB$RELATION_NAME='+QuotedStr('Producto')+' AND RDB$FIELD_NAME='+QuotedStr('Pro_Precio'));

Salud OS

Edito: Se me ha adelantado estimado jhonny.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #9  
Antiguo 22-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Otra cosa, para el proposito que buscas no es necesario el Order By, ya que solo necesitas saber si existe o no el campo y ademas siempre te devolvera un solo registro .

P.D. para egostar: no siempre puedo perder .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #10  
Antiguo 22-11-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por jhonny Ver Mensaje
P.D. para egostar: no siempre puedo perder .
Ah no amigo jhonny, recuerda que lo importante es la constancia

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #11  
Antiguo 22-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Se me olvidaba, los nombres de las tablas y los campos deben ir en mayusculas, por lo que sería conveniente (claro que eso lo decidis vos), hacerle lo siguiente a la consulta...

Código SQL [-]
Select RDB$FIELD_NAME from  RDB$RELATION_FIELDS
 where  RDB$RELATION_NAME=UPPER('Nombre_Tabla') AND RDB$FIELD_NAME=UPPER('Nombre_Campo')

Propongo esa consulta en caso de que el nombre de la tabla y el del campo, lo vayas a pasar por parametro o algo asi .

P.D. para egostar: No en el caso de ser el perder .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #12  
Antiguo 22-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Mushas gracias...

me funciono super... utilice esto

Código Delphi [-]
Datos.IBQ_Edit.Close;
Datos.IBQ_Edit.SQL.Clear;
Datos.IBQ_Edit.SQL.Add('Select RDB$FIELD_NAME From RDB$RELATION_FIELDS');
Datos.IBQ_Edit.SQL.Add('Where RDB$RELATION_NAME='+QuotedStr('Producto')+' AND RDB$FIELD_NAME='+QuotedStr('Pro_Precio'));
Datos.IBQ_Edit.Open;

Cita:
Se me olvidaba, los nombres de las tablas y los campos deben ir en mayusculas,
es que así cree las tablas y los campos.. con mescla de mayuscula y miníscula...es que me gusta trabajar así...

Pero me tomo bien la sentencia...gracias
__________________
BlueSteel
Responder Con Cita
  #13  
Antiguo 22-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
ahh... se me olvidaba y aprovechando el hilo

si quiero traspasar (crear o modificar), ya sea un trigger o un procedimiento almacenado lo realizo de la misma forma?... por medio de un IBQuery.. esto lo digo por lo extenso de las lineas que puede tener uno de estos...


Todo esto lo necesito realizar ya que lo estoy probando con la base que tengo de respaldo en mi trabajo.. pero lo que quiero hacer es crear un apartado de mantenimiento en donde todos los cambios que necesite los traspase directo a la base de datos.. y sin tener que hacer los cambios en la base ...

la idea es llevar el archivo ejecutable.. cargarlo.. y desde ahí que se realicen todos los cambios en la base...
__________________
BlueSteel
Responder Con Cita
  #14  
Antiguo 22-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Si, tambien puedes usar el IBQuery para eso, pero la verdad es que es muy aburrido y engorroso hacer lo que quieres, yo antes lo hacia de la misma manera pero se me convirtio en un problema ya que se volvio en otro programa mas para "mantener", en la versión 2.1 de FireBird vienen cosas interesantes como el "Alter or Create" pero aún asi debe ser muy aburrido mantener este programita ...

Lo que hice mas adelante fue usar el DBComparer, pero como necesitabamos que nuestros clientes pudieran actualizar sus BD de forma sencilla, pues siempre manteniamos una BD en Blanco (Sin un solo dato), pero con la estructura siempre actualizada, comenzamos a utilizar los componentes de DBComparer para Delphi, adaptamos el asunto a nuestra necesidad y enviamos un solo software a los clientes, cada que necesitaban una actualización pinchaban un boton, el programa se encargaba de descargar la BD vacia pero actualizada, en fbk y comprimida de un FTP, la descomprimia, la restauraba, comparaba la BD vacia pero actualizada contra la de nuestros clientes con dichos componentes y aplicaba los cambios, luego de eso... adios a mantener ese programita aburridor lleno de scripts confusos y dificiles de depurar por todos lados .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 22-11-2007 a las 22:50:33.
Responder Con Cita
  #15  
Antiguo 23-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Gracias

veo que lo mejor será realizar las modificaciones y guardarlas como consultas SQL y luego ejecutarlas desde el IBManager o IBExpert...


__________________
BlueSteel

Última edición por BlueSteel fecha: 23-11-2007 a las 16:57:08. Razón: ortografia
Responder Con Cita
  #16  
Antiguo 23-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por BlueSteel Ver Mensaje
Gracias

veo que lo mejor será realziar las modificaciones y guardarlas como consultas SQL y luego ejecutarlas desde el IBManager o IBExpert...


Eso en el caso que siempre sea una persona calificada quien va a hacerlo, pero si al final seran los usuarios finales de la aplicación, lo mejor es hacer un aplicativo como el que te mencione, que les ayude y asi no gastes dinero en transporte para los "muchachos" de soporte (solo para ejecutar un script ).
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #17  
Antiguo 23-11-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Cita:
asi no gastes dinero en transporte para los "muchachos" de soporte
gracias por lo de muchacho..... pero yo mismo ejecutare el codigo a quien le vendi el sistema..... .

Cita:
solo para ejecutar un script
Ultimamente tengo que ir.. mira que tengo un contrato de mantencion y en los últimos 3 meses con suerte los he visitado en 4 oportunidades....
__________________
BlueSteel
Responder Con Cita
  #18  
Antiguo 23-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Esta bien, como quien dice, billete es lo que hay
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #19  
Antiguo 23-11-2007
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
Ya se que se dio solución al problema pero me gustaria aportar otra forma de hacerlo, ya que en muchos caso el tener tanto quotedStr o tantos '''' es complicado para mi... al final leo el código de forma clara así:
Código SQL [-]
Select RDB$FIELD_NAME from  RDB$RELATION_FIELDS
 where  RDB$RELATION_NAME=UPPER(:tabla) AND RDB$FIELD_NAME=UPPER(:campo)

y luego los parámetros en delphi

Código Delphi [-]
Datos.IBQ_Edit.ParamByName('tabla').asString := edTabla.Text;
Datos.IBQ_Edit.ParamByName('campo').asString := edCampo.Text;
Datos.IBQ_Edit.open;
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #20  
Antiguo 23-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Estoy de acuerdo con RONPABLO a mi me sucede lo mismo , los paramteros me facilitan la lectura para el futuro , por eso yo tambien acostumbro a usarlos.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
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
Modificar DSN desde código Iuconlas Conexión con bases de datos 0 20-07-2006 10:57:10
Modificar NetDir por código Delphi arex400 Conexión con bases de datos 2 24-08-2005 15:48:23
Crear o modificar Tablas Paradox desde Delphi Gabriel2 Tablas planas 6 18-07-2005 10:25:18
Modificar una gráfica por código hogol Servers 0 02-12-2003 21:55:13
Modificar LOCAL SHARE por código Lepe Conexión con bases de datos 2 16-09-2003 16:22:44


La franja horaria es GMT +2. Ahora son las 17:58:29.


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