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 07-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Quién diría que eres un novato?
Ambas tablas siempre se diferenciarán en un campo. Si una se modifica, entonces la otra también.

Código:
tabla-A
 campo1
 campo2
 campo3
 campo4
 campo5
 campo6
 campo7
 campo8
 ...
 campoXXX

tabla-B
 campo0  <- único campo distinto
 campo1
 campo2
 campo3
 campo4
 campo5
 campo6
 campo7
 campo8
 ...
 campoXXX
Responder Con Cita
  #2  
Antiguo 07-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Sigo desubicado, para variar.
Pregunto:
1- Son siempre iguales, salvo por un campo ?
2- Los campos van creciendo, osea, van aumentando en su numero. ?.
Lo digo por que en principio pusiste 4 campos en la primera tabla y cinco en la segunda y hora pones mas.
Ya sabes que poco ayudare, pero si pregunto tal vez a alguien se le encienda la bombilla.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 07-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, me explico mejor, lo anterior era solamente un ejemplo, son dos tablas iguales salvo por un campo. Seguramente se ampliarán con el tiempo con el añadido de más campos porque se necesite hacer algo más.
En principio deben ser iguales salvo ese primer campo. O sea, 'casi' iguales
Ahora mismo tiene 29 campos. Y lo que quiero conseguir es "olvidarme" de la misma el día que sea necesario añadir algún nuevo campo para controlar cualquier otra cosa, o sea, que dentro de unos meses, cuando ya te has olvidado de todo, no tenga que decir: "no se sabe por qué falla el programa", y después de mucho perder el tiempo: "el problema era que había que añadir el nuevo campo en un store procedure, y se nos había olvidado."
Resumiendo, da igual los campos que tenga la tabla, lo que se intenta es no tener que controlarlo, que sea un proceso automático. Al igual que en delphi se puede hacer algo así como (de memoria):
Código Delphi [-]
tabla1.open;
while not tabla1.eof do
begin
  tabla2.append;
  for iX=0 to tabla1.fields.count-1 do
    tabla2.fields[iX].value := tabla1.fields[iX].value;
  tabla2.post;
  tabla1.next;
end;
Responder Con Cita
  #4  
Antiguo 07-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, me voy a dormir, mañana sigo.

¡¡¡GRACIAS!!!
Responder Con Cita
  #5  
Antiguo 07-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Vale amigo, mañana lo harás sin problemas, la almohada es la mejor consejera.
Buenas Noches.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 07-02-2012
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.289
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 la tabla no tiene muchos datos, tal vez te saldría a cuenta, dentro del Stored Procedure, añadir el campo0 a la primera tabla, luego hacer el INSERT INTO y finalmente volver a borrar el campo de la primera tabla.

La ventaja que le veo es que cuando añadas más campos, el SP no deberá cambiar.
La desventaja es que si la tabla es muy grande (con muchos datos), habrá que ver el tiempo que tarda en crear y borrar el campo.
__________________
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
  #7  
Antiguo 07-02-2012
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Me da la sensación de que Caral es el que más cerca anda de la solución.

yo haría lo mismo que él, leería los campos de la tabla 1, y montaría la query en una variable de tipo string.

Luego ejecutaría "EXCECUTE STATEMENT CONSULTA" siendo consulta la query que he montado.

No lo he probado. Si funciona, no deberás cambiar nunca el store procedure.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #8  
Antiguo 07-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Por eso pensé en que si se puede saber que campos tiene cada tabla y guardar los nombres en donde sea se puede usar la consulta que hizo caro, seria algo asi:
Reviso los campos de cada tabla:
Código SQL [-]
SELECT RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS
WHERE RDB$RELATION_NAME='BD1' AND RDB$RELATION_NAME='BD2';
Guardo los datos que como serán nombres de campos podrán ser string e inserto con los datos obtenidos usando la consulta de Caro:
BD1/campos= dato1, dato2, dato3, dato4, dato5
BD2/campos= dato0, dato1, dato2, dato3, dato4, dato5

Código SQL [-]
Insert Into BD2 (dato0, dato1, dato2, dato3, dato4, dato5)  select dato1, dato2, dato3, dato4, dato5 from BD1
Me da la impresión de que la inserción de datos es mas fiable si se ponen los nombres de los campos.
No se amigo, es solo una opinión sin mucha base; Bueno, sin base alguna.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 07-02-2012
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 Casimiro.

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Bueno, me explico mejor, lo anterior era solamente un ejemplo, son dos tablas iguales salvo por un campo. Seguramente se ampliarán con el tiempo con el añadido de más campos porque se necesite hacer algo más.
En principio deben ser iguales salvo ese primer campo. O sea, 'casi' iguales
Ahora mismo tiene 29 campos. Y lo que quiero conseguir es "olvidarme" de la misma el día que sea necesario añadir algún nuevo campo para controlar cualquier otra cosa, o sea, que dentro de unos meses, cuando ya te has olvidado de todo, no tenga que decir: "no se sabe por qué falla el programa", y después de mucho perder el tiempo: "el problema era que había que añadir el nuevo campo en un store procedure, y se nos había olvidado."
Resumiendo, da igual los campos que tenga la tabla, lo que se intenta es no tener que controlarlo, que sea un proceso automático. Al igual que en delphi se puede hacer algo así como (de memoria):
Código Delphi [-]tabla1.open; while not tabla1.eof do begin tabla2.append; for iX=0 to tabla1.fields.count-1 do tabla2.fields[iX].value := tabla1.fields[iX].value; tabla2.post; tabla1.next; end;
Pues puedes utilizar un bucle de estos para construir sobre la marcha la sentencia, antes de ejecutarla (ignorando el campo que sabes que va a ser distinto).

Código:
SQL := 'insert into TablaB'(;

tablaA.open;
while not tablaA.eof do begin
   for iX = 0 to tablaA.fields.count-1 do SQL := SQL + tablaA.fields[iX].FieldName + ', ';
   tablaA.next;
end;

SQL := SQL + ') select * from TablaA';

Conexion.ExecSQL(SQL);
Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).

Última edición por guillotmarc fecha: 07-02-2012 a las 18:53:48.
Responder Con Cita
  #10  
Antiguo 07-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por guillotmarc Ver Mensaje
Hola Casimiro.
Pues puedes utilizar un bucle de estos para construir sobre la marcha la sentencia, antes de ejecutarla (ignorando el campo que sabes que va a ser distinto).
Saludos.
Hola, sí, desde delphi no hay problema, es que quiero hacerlo en la base de datos, desde un stored procedure, por ejemplo.
Responder Con Cita
  #11  
Antiguo 07-02-2012
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Hola, sí, desde delphi no hay problema, es que quiero hacerlo en la base de datos, desde un stored procedure, por ejemplo.
Entonces puedes hacer lo mismo en el procedimiento almacenado, consultando las tablas de sistema para obtener los nombres de los campos, y construyendo una sentencia SQL a ejecutar en un EXECUTE STATEMENT (no soy muy aficionado a construir sentencias dinámicamente, pero no parece que en este caso tengas más opciones).
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #12  
Antiguo 07-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Ya, pues..., ni qué decir que en MySQL funciona a la perfección // Saludos
Sabía que ese iba a ser tu siguiente comentario


Cita:
Empezado por guillotmarc Ver Mensaje
Entonces puedes hacer lo mismo en el procedimiento almacenado, consultando las tablas de sistema para obtener los nombres de los campos, y construyendo una sentencia SQL a ejecutar en un EXECUTE STATEMENT (no soy muy aficionado a construir sentencias dinámicamente, pero no parece que en este caso tengas más opciones).
Parece que va a ser la solución, aunque tampoco me gusta mucho.
Responder Con Cita
  #13  
Antiguo 02-11-2012
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 22
TJose Va por buen camino
Question

Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Quién diría que eres un novato?
Ambas tablas siempre se diferenciarán en un campo. Si una se modifica, entonces la otra también.

Código:
tabla-A
 campo1
 campo2
 campo3
 campo4
 campo5
 campo6
 campo7
 campo8
 ...
 campoXXX

tabla-B
 campo0  <- único campo distinto
 campo1
 campo2
 campo3
 campo4
 campo5
 campo6
 campo7
 campo8
 ...
 campoXXX
Hola Casimiro

¿Por qué modificas la estructura de la tabla?
¿Por cambios en las reglas de negocio o por otra razón?

Saludos
TJose
Responder Con Cita
  #14  
Antiguo 02-11-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Pues a mi la mejor solució, por lo compresiva a nivel humano es:

Código SQL [-]
insert into Members (number, name)
  select number, name from NewMembers where Accepted = 1
    union
  select number, name from SuspendedMembers where Vindicated = 1

Sacado de la página de Firebird, lo busqué en google hace mucho tiempo como Insert into select =P

Saludos.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #15  
Antiguo 02-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, de esta pregunta hace 10 meses, ya casi ni me acuerdo, pero el problema es que lleva un generador también, creo que no la has leido desde el principio
Responder Con Cita
  #16  
Antiguo 02-11-2012
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Hola, de esta pregunta hace 10 meses, ya casi ni me acuerdo, pero el problema es que lleva un generador también, creo que no la has leido desde el principio
El principio si, pero no todo jajajajjaa =P
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #17  
Antiguo 02-11-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Aporto mi grano de arena, que tal ésta instrucción pudiendo poner un WHERE si se necesita.
Código SQL [-]
SELECT
    0 AS CAMPO0
    ,*
  INTO TablaB
  FROM TablaA

Un saludo
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #18  
Antiguo 02-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por olbeup Ver Mensaje
Aporto mi grano de arena, que tal ésta instrucción pudiendo poner un WHERE si se necesita.
Aunque ya se solucionó hace tiempo este tema, gracias de todas formas
Responder Con Cita
  #19  
Antiguo 02-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mightydragonlor Ver Mensaje
El principio si, pero no todo jajajajjaa =P
De todas formas, gracias
Responder Con Cita
  #20  
Antiguo 02-11-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por TJose Ver Mensaje
Hola Casimiro
¿Por qué modificas la estructura de la tabla?
¿Por cambios en las reglas de negocio o por otra razón?
Saludos
TJose
Sí, por ese motivo, nuevos campos que son necesarios según los clientes van pidiendo nuevas funcionalidades.
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
Opciones para copiar registros de una tabla a otra pmtzg Firebird e Interbase 19 10-08-2011 18:30:40
copiar registros de una tabla a otra Rofocale Varios 11 07-06-2011 13:23:55
copiar ciertos registros de una tabla a otra JESUSNET Conexión con bases de datos 2 07-06-2008 16:53:13
Como copiar los datos de una tabla a otra Shidalis Varios 2 21-07-2005 14:34:32
Copiar registros de una tabla a otra en Access con Delphi Gelmin Conexión con bases de datos 1 01-07-2005 12:35:04


La franja horaria es GMT +2. Ahora son las 10:54:20.


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