Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Como seleccionar datos de una tabla e insertarlos en otra por Delphi

Hola comunidad, quisiera saber si alguno de ustedes sabe como extraer o seleccionar los registros de una tabla de una base de datos por medio de delphi y como insertar estos datos en otra tabla, es que deseo pasar estos registros, pero no se como???
Responder Con Cita
  #2  
Antiguo 18-07-2013
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Pueden haber varios opciones. Pero es necesario que des mas detalles de lo que quieres hacer...

Saludos
Responder Con Cita
  #3  
Antiguo 18-07-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jscubillos5, bienvenido a Club Delphi

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Saludos y gracias por tu colaboración
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 18-07-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
jscubillos5,

Cita:
Empezado por jscubillos5
...como extraer o seleccionar los registros de una tabla de una base de datos por medio de Delphi y como insertar estos datos en otra tabla...
Te sugiero consultar este libro:
Cita:
La Cara Oculta de Delphi 4, Autor Ian Marteens : http://terawiki.clubdelphi.com/Delph...phi_4_pdf_.zip
Espero sea útil

Nelson.
Responder Con Cita
  #5  
Antiguo 18-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Hola gracias por la info sobre la guía de estilo, ahora entiendo que me exprese muy vagamente en el problema que tengo actual, lo que deseo aprender hacer es lo siguiente:
1. Por medio de una consulta de Delphi IBExpert, poder obtener todos los registros de una tabla.
2. Por medio de un objeto de Delphi, aun no se cual, poder tomar los datos consultados y meterlos en otra tabla.
Responder Con Cita
  #6  
Antiguo 18-07-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jscubillos5.

No has comentado con que RDBMS estas trabajando, pero por tu mención a IBExpert es muy posible que sea Firebird. Si estoy en lo cierto, te recomiendo que leas este tutorial del amigo Caral: Tutorial (como empezar con Firebird) Novatos


Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 18-07-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jscubillos5 Ver Mensaje
ahora entiendo que me exprese muy vagamente
y sigue siendo así, lo que preguntas es muy amplio. Además de que no existe delphi ibexpert.
Aclara lo más exactamente posible tu duda, no hay problema de espacio, puedes escribir tanto como quieras.

EDITO: haz caso a ecfisa, te ha indicado un excelente enlace.
Responder Con Cita
  #8  
Antiguo 18-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Hola ecfisa, efictavamente el proceso que deseo ejecutar es a una base de datos Firebird, y pues lo que deseo aprender hacer es lo siguiente:
1. Por medio de un boton en delphi, deseo que en su procedure Click(Sender: TObject);, es decir "en su proceso de ejecucción", dentro de este haga:
2. Una consulta a firebird por medio de un IBQUERY, que esta dentro del menu de contextual de delphi en la etiqueta INTERBASE.
3. Esta consulta debe traer todos los registros de una tabla.
4. Luego insertar estos registros en otra tabla.

Ahora cada vez que intento citar o responder el mensaje de algunos de ustedes, me arroja un error el cual dice que yo no tengo permitido colocar imagenes o insertar urls.
Responder Con Cita
  #9  
Antiguo 18-07-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para aprender eso, entonces, te viene perfecto el libro aconsejado por nlsgarcia y el enlace de ecfisa.

Y si tienes alguna duda, pregunta
Responder Con Cita
  #10  
Antiguo 18-07-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jscubillos5 Ver Mensaje
Ahora cada vez que intento citar o responder el mensaje de algunos de ustedes, me arroja un error el cual dice que yo no tengo permitido colocar imagenes o insertar urls.
Es un control anti-spam, cuando tengas unos mensajes más ya podrás.
De momento puedes poner los enlaces y algún moderador lo solucionará.
Ejemplo: ttp://loquesea.com/imagen.jpg
Responder Con Cita
  #11  
Antiguo 19-07-2013
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.267
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
Cita:
Empezado por jscubillos5 Ver Mensaje
1. Por medio de un boton en delphi, deseo que en su procedure Click(Sender: TObject);, es decir "en su proceso de ejecucción", dentro de este haga:
2. Una consulta a firebird por medio de un IBQUERY, que esta dentro del menu de contextual de delphi en la etiqueta INTERBASE.
3. Esta consulta debe traer todos los registros de una tabla.
4. Luego insertar estos registros en otra tabla.
Lo primero es colocar en un formulario los componentes correspondientes para realizar las 2 conexiones.
(1) Lo necesario para conectar a la primera Base de Datos (IBDatabase, IBTransaction, IBQuery -o similares dependiendo de los componentes de conexión que estés usando-).
(2) Lo mismo para la Base de Datos destino_; En este caso pueden ser un IBDatabase, IBTransaction, IBTable (o similares).
(3) Configurar el primer IBQuery para ejecutar la consulta.
(4) A medida que vas recorriendo el IBQuery (con los registros devueltos por la consulta), vas insertando en la segunda tabla.

El proceso en sí es sencillo. Ir leyendo de la primera e ir insertando en la segunda.

Ahora si lo intentas, nos puedes decir de forma más concreta dónde tienes problemas.

¿Seleccionar componentes?
¿Configurar los componentes?
¿Generar el código del proceso?
....
__________________
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
  #12  
Antiguo 19-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Continuando con este post

Hola comunidad, pues he leido los libors que me dieron y los recursos que he encontrado en la web, y he llegado a este punto:

Código Delphi [-]
procedure TDataModuleCarga.ExtraerDatos(RutaBaseDatos:String);
var NombreTabla, NombreCampo: String;
Index: Integer;
begin
  IBDatabaseSanGil.DatabaseName:= RutaBaseDatos;
  IBDatabaseSanGil.Open;
  try
    IBQueryTablas.Open;
    while not IBQueryTablas.Eof do
    begin
      NombreTabla:= IBQueryTablas.fieldbyname('nombre_tabla').AsString;
      IBQueryExtraerDatosTablas.SQL.Text:= 'select * from ' + NombreTabla;
      IBQueryExtraerDatosTablas.Open;
      for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do
      begin
        NombreCampo:= IBQueryExtraerDatosTablas.FieldList[Index].Text;
      end;
    end;
    IBQueryExtraerDatosTablas.Close;
  finally
    IBDatabaseSanGil.Close;
  end;
end;

Cuando ejecuto este código arroja el siguiente error: Dynamic SQL Error SQL error code = -804 Data type unknown Client SQL dialect 1 does not support reference to BIGINT data type, ¿Alguien sabe el por que de este error?
Responder Con Cita
  #13  
Antiguo 19-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Hola comunidad

Cita:
Empezado por jscubillos5 Ver Mensaje
Hola comunidad, pues he leido los libors que me dieron y los recursos que he encontrado en la web, y he llegado a este punto:


Código Delphi [-]procedure TDataModuleCarga.ExtraerDatos(RutaBaseDatos:String);
var NombreTabla, NombreCampo: String;
Index: Integer;
begin
IBDatabaseSanGil.DatabaseName:= RutaBaseDatos;
IBDatabaseSanGil.Open;
try
IBQueryTablas.Open;
while not IBQueryTablas.Eof do
begin
NombreTabla:= IBQueryTablas.fieldbyname('nombre_tabla').AsString;
IBQueryExtraerDatosTablas.SQL.Text:= 'select * from ' + NombreTabla;
IBQueryExtraerDatosTablas.Open;
for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do
begin
NombreCampo:= IBQueryExtraerDatosTablas.FieldList[Index].Text;
end;
end;
IBQueryExtraerDatosTablas.Close;
finally
IBDatabaseSanGil.Close;
end;
end;




Cuando ejecuto este código arroja el siguiente error: Dynamic SQL Error SQL error code = -804 Data type unknown Client SQL dialect 1 does not support reference to BIGINT data type, ¿Alguien sabe el por que de este error?
Siguiendo con la solución de mi problema encontre vía web que solo era cuestión de configurar la propiedad SQLDIALECT pasarla de 1 a 3, y listo, a bueno y en el nombre campo se debe llamar así:
Código Delphi [-]
NombreCampo:= IBQueryExtraerDatosTablas.FieldList[Index].FieldName;
ya que como lo tenia antes llama es el valor del campo o el valor deñ registro
Responder Con Cita
  #14  
Antiguo 22-07-2013
Avatar de jscubillos5
jscubillos5 jscubillos5 is offline
Miembro
NULL
 
Registrado: jul 2013
Ubicación: Bogotá
Posts: 44
Poder: 0
jscubillos5 Va por buen camino
Respuesta de la pregunta

Cita:
Empezado por jscubillos5 Ver Mensaje
Siguiendo con la solución de mi problema encontre vía web que solo era cuestión de configurar la propiedad SQLDIALECT pasarla de 1 a 3, y listo, a bueno y en el nombre campo se debe llamar así: Código Delphi [-]NombreCampo:= IBQueryExtraerDatosTablas.FieldList[Index].FieldName;

ya que como lo tenia antes llama es el valor del campo o el valor deñ registro
Hola foro, ya he logrado conseguir que de una base de datos se consulten todas las tablas y pasar los registros de estas tablas a otra base de datos el codigo va así:
Código Delphi [-]
procedure TDataModuleCarga.ExtraerDatos(RutaBaseDatos, ArchivoExcepciones:String); //Creo un método
var NombreTabla, NombreCampo, SentenciaInsertar, ValorCampo, Codigo_Agencia, RutaArchivoSalida: String;
Index: Integer; 
Archivo: TextFile;// Cargo varias variables a usar
begin
  RutaArchivoSalida:= ExtractFilePath(ArchivoExcepciones) + 'Lock.txt'; // Decidi crear un archivo de lock, para saber que inserciones se generan
  IBDatabaseSanGil.DatabaseName:= RutaBaseDatos; //Le asigno la ruta de conexión a una base de datos
  IBQueryObtenerCodigo_Agencia.Open; //Abro una consulta
  Codigo_Agencia:= IBQueryObtenerCodigo_Agencia.fieldbyname('AGENCIA').AsString; //Cargo en una variable el valor de la consulta anterior
  AssignFile(Archivo, RutaArchivoSalida); // Asigno el archivo del lock y la ruta de ubicación del mismo
  Rewrite(Archivo); //Luego lo reescribo si ya existe
  Writeln(Archivo, 'Archivo lock insertaciones'); //Escribo un titulo al archivo
  IBDatabaseSanGil.Open; //Abro la primera consulta para extraer los datos
  try // Lo encierro en un try 
    IBQueryTablas.Open; // Abro la consulta de las tablas
    while not IBQueryTablas.Eof do //Mientras la consulta de las tablas no termine hago
    begin
      NombreCampo:= ''; // Asigno un valor nulo a la variable
      NombreTabla:= Trim(IBQueryTablas.fieldbyname('nombre_tabla').AsString); // Obtengo el nombre de la tabla de la consulta
      IBQueryExtraerDatosTablas.SQL.Text:= 'select * from ' + NombreTabla;
      // Luego cargo los datos de la consulta con la cual voy a extraer todos los campos y datos de la tabla
      IBQueryExtraerDatosTablas.Open; // Abro la consulta
      for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do // Recorro los campos o nombres de los campos por cada tabla
      begin
        NombreCampo:=NombreCampo + ', ' + IBQueryExtraerDatosTablas.FieldList[Index].FieldName; //Lo asigno a una variable
      end;
      Delete(NombreCampo, 1, 1); 
      //Elimino el primer item de Nombre campo, puesto que es una coma al ejecutar el script arrojara una excepción
      while not IBQueryExtraerDatosTablas.Eof do //Mientras extraer datos no tenga fin hago
      begin
        ValorCampo:= ''; // Al igual que con NombreCampo, inicializo el valor de campo en nulo o vacio
        for Index:= 0 to IBQueryExtraerDatosTablas.FieldCount -1 do
        begin
          ValorCampo:= ValorCampo + ', ' + IBQueryExtraerDatosTablas.FieldList[Index].Text;
          //Al igual que el anterior cargo el valor del campo en una variable string
        end;
        Delete(ValorCampo, 1, 1); //Elimino el primer caracter igual que en el anterior, puesto que es una coma
        if DebeProcesarTabla(ArchivoExcepciones, NombreTabla) then 
        //Valido si la tabla no debe ser procesa, es decir no todas las tablas que estoy recorriendo, deseo insertar los mismos valores
        //El método DebeProcesarTabla es una function retorna verdadero o falso. 
        begin  //Aquí ya realizo el proceso de crear la sentencia de inserción .
          SentenciaInsertar:= 'INSERT INTO ' + NombreTabla + ' ('  + NombreCampo + ', CODIGO_AGENCIA' + ' )' + ' VALUES ' + ' (' + ValorCampo +  ', ' + Codigo_Agencia + ' );'; 
          try
           Writeln(Archivo, SentenciaInsertar); //Escribo la linea en el archivo del lock
           finally
           //CloseFile(Archivo); 
//Comentarie esto por que cada vez que el archivo se iba creando iba generando un error en la proxima vuelta del bucle
           end;
        end
        else
        begin
          SentenciaInsertar:= 'INSERT INTO ' + NombreTabla + ' ('  + NombreCampo + ' )' + ' VALUES ' + ' (' + ValorCampo + ' );';
          try
           Writeln(Archivo, SentenciaInsertar);
           finally
           //CloseFile(Archivo);
           end;
        end;
        IBQueryExtraerDatosTablas.Next; //Para no entrar a un bucle finito
      end;
      IBQueryTablas.Next; //Para no entrar a un bucle finito
    end;
    IBQueryExtraerDatosTablas.Close; //Cierro las consultas
  finally
    CloseFile(Archivo); //Cierro el archivo
    IBDatabaseSanGil.Close; //Cierro la conexión a la base de datos.
  end;
end;

Finalmente seria colocar que por cada inserción se executa una consulta IBQUERY en la base de datos con el SQL.TEXT:= SentenciaInsercion;
Luego se debe ejecutar Consulta.EXEC; y este código deberia ir debajo de cada sentencia de insertar y por encima del archivo del lock, con esto se garantiza que el insert que sea escrito en el lock se haya procesado antes en la base de datos y listo .

Última edición por Casimiro Notevi fecha: 22-07-2013 a las 18:30:36.
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
como seleccionar fila de un dbgrid y que se me guarden los datos en una tabla rogercito Varios 11 04-10-2011 21:35:35
Como copiar los datos de una tabla a otra Shidalis Varios 2 21-07-2005 14:34:32
Seleccionar registros en una tabla, envio, e insercion en otra tabla!! EfrainSanmiguel Conexión con bases de datos 3 21-10-2004 01:12:43
Como insertar datos de una tabla en otra tabla? Salomon Firebird e Interbase 1 28-08-2003 11:29:40
Como mostrar los datos para luego insertarlos? judoboy OOP 8 14-05-2003 09:51:51


La franja horaria es GMT +2. Ahora son las 15:13:38.


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