Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-03-2020
igamerpc igamerpc is offline
Miembro
 
Registrado: feb 2020
Posts: 53
Poder: 5
igamerpc Va por buen camino
Insertar tabla de otra tabla con condiciones

Buenos dias, tengo duda no se como funciona ejemplo te dire


Tabla 1: ID (esta vacia)



Tabla 2: CODIGO, NOMBRE (archivo DBF que ya tiene contenido)



Tabla 3: ID, CODIGO, NOMBRE (es el servidor que ya tiene contenido)


Quiero que la tabla 2 insertar a la tabla 1 solo ID para que coinciden con la tabla 3 el ID.



En delphi funciona con INNER JOIN no?
Responder Con Cita
  #2  
Antiguo 18-03-2020
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.

Si no te entendí mal, creo que la instrucción SQL que buscas es:
Código SQL [-]
INSERT INTO TABLA1 (ID, CODIGO, NOMBRE)
SELECT T2.ID, T2.CODIGO, T2.NOMBRE
FROM TABLA2 T2
INNER JOIN TABLA3 T3 ON T2.ID = T3.ID

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 18-03-2020
igamerpc igamerpc is offline
Miembro
 
Registrado: feb 2020
Posts: 53
Poder: 5
igamerpc Va por buen camino
Perdon digo sobre Delphi eso como hace. Y no SQL.

En inner join funciona con Delphi?

De todas formas estoy programando a ver si funciona. Quizas la setencia sql funciona dentro de Delphi.

Muchas gracias

Última edición por igamerpc fecha: 18-03-2020 a las 11:44:01. Razón: Sobre SQL a delphi
Responder Con Cita
  #4  
Antiguo 18-03-2020
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Te pasan la sentencia porque desde Delphi vas a poder ejecutar esa sentencia usando los componentes de acceso a datos.
Lo que necesitas es conectar tu aplicación (Componente TDataBase por ej.) a esos archivos DBF.

Este video te muestra como conectar un programa de Delphi a una base de datos y como trabajar con esa DB.

https://www.youtube.com/watch?v=dwb0wv6IJqA

Y este te muestra como conectar a dBase (Archivos DBF), usando Firedac.

https://www.youtube.com/watch?v=cHjbDtK-GK0
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #5  
Antiguo 19-03-2020
igamerpc igamerpc is offline
Miembro
 
Registrado: feb 2020
Posts: 53
Poder: 5
igamerpc Va por buen camino
Si ese lo tengo yo todo conectado y todo. Lo refiero que pasar tabla 2 a tabla 1 todos los documentos pero distintas.

Es dificil creo.. la tabla 3 insertar numero id a la tabla 1 relacionado de la tabla 2. Es poco lio.
Lo estoy intentando. Puede ser debe ser crear 3 tablas para poder pasar.
Responder Con Cita
  #6  
Antiguo 20-03-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Si he entendido bien: en Tabla1 quieres guardar una relación entre Tabla2 y Tabla3.
Según como sea esa relación hay distintos modos de hacerlo pero ten en cuenta que a través del componente TQuery (o similar) puedes ejecutar código SQL desde Delphi, así que si tienes claro como hacerlo en SQL pasarlo a Delphi es inmediato.
Montas el insert que necesites y en cada iteración le pasas los parámetros. Algo así:
Código Delphi [-]
   qInsertar:= TQuery.create(Application);
   with qInsertar do
   begin
      try
         close;
         SQL.Clear;
         DatabaseName := f_ficheros.sDataBaseName;
         SQL.Add('Insert into '+tabla1+' (IdUno, UdDos)');
         SQL.Add('Values (:idUno,:idDos)');
         Prepare;
         for (tuCondicionParaInsertar) do
         begin
            Parambyname('idUno').AsInteger  := datoDeTabla2;
            Parambyname('idDos').AsInteger  := datoDeTabla3;
            ExecSQL;
            //Siguiente registro de las tablas, o lo que sea que tengas que hacer para insertar
        end;
      finally
         Free;
      end;
   end;
Responder Con Cita
  #7  
Antiguo 23-03-2020
igamerpc igamerpc is offline
Miembro
 
Registrado: feb 2020
Posts: 53
Poder: 5
igamerpc Va por buen camino
Te voy a explicar mas claro, porque el anterior parece confusiones de las tablas. Te voy a mostrar un ejemplo de las tablas

TABLA 1: ID
TABLA 2: ID CODIGO NOMBRE (4, L, Lucas)
TABLA 3: CODIGO NOMBRE (L, Lucas)

Seleccionar la tabla 2 si coincide con la tabla 3 y luego insertar a la tabla 1. Te voy a mostrar ejemplo en SQL para poder ir a Delphi es igual funcionar para ejecutar.

Código SQL [-]
SELECT ID FROM TABLA 2 WHERE CODIGO='L' and NOMBRE='Lucas'




Ahora la tabla 2 si coincide con la tabla 3 y luego insertar el ID de la tabla 1. Eso creo debe hacer IF entre tabla 2 y tabla 3 si coincide, luego insertar a la Tabla 1.

Última edición por igamerpc fecha: 23-03-2020 a las 15:48:20. Razón: cambio explicar tabla
Responder Con Cita
  #8  
Antiguo 24-03-2020
Avatar de kuan-yiu
[kuan-yiu] kuan-yiu is offline
Miembro Premium
 
Registrado: jun 2006
Ubicación: Galicia. España.
Posts: 1.017
Poder: 19
kuan-yiu Va camino a la fama
Código Delphi [-]
   qInsertar:= TQuery.create(Application);
   with qInsertar do
   begin
      try
         close;
         SQL.Clear;
         DatabaseName := miBase;
         SQL.Add('Insert into '+tabla1+' (Id)');
         SQL.Add('Values (:id)');
         Prepare;
         tabla2.first;
         tabla3.first;
         //Si no están ordenadas tienes que tener dos bucles anidados. Si lo están vale algo así.
         while (not tabla2.eof)and(not tabla3.eof) do
         begin
            if (tabla2.FieldByName('CODIGO').AsInteger=tabla3.FieldByName('CODIGO').AsInteger) and
               (tabla2.FieldByName('NOMBRE').AsString=tabla3.FieldByName('NOMBRE').AsString) then
            begin
               Parambyname('id').AsInteger  := tabla2.FieldByName('CODIGO').AsInteger;
               ExecSQL;
               tabla2.next;
               tabla3.next;
            end
            else
            begin
            //Siguiente registro. Depende de la ordenación. Avanzando una u otra según cual sea menor o mayor.
            end;
        end;
      finally
         Free;
      end;
   end;
Responder Con Cita
  #9  
Antiguo 24-03-2020
igamerpc igamerpc is offline
Miembro
 
Registrado: feb 2020
Posts: 53
Poder: 5
igamerpc Va por buen camino
Ya esta solucionado era RecordCount si es 1 que si coincide las dos tablas a insertar el registro. Por fin llevo 1 semana intentando.
Responder Con Cita
  #10  
Antiguo 24-03-2020
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Te recomiendo revises la solución que te plantea [kuan-yiu].

El recordcount es una propiedad que indica el numero total de registros asociados al dataset, que no siempre coinciden con el número total de la tabla o consulta.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #11  
Antiguo 24-03-2020
igamerpc igamerpc is offline
Miembro
 
Registrado: feb 2020
Posts: 53
Poder: 5
igamerpc Va por buen camino
Vale hago lo d kuan-yiu lo probare a ver si va bien.
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
Insertar filas de una tabla a otra en distinta BD Gregorio Cíber Firebird e Interbase 2 23-12-2016 22:19:26
actualizar tabla al insertar en otra tabla hybrid Conexión con bases de datos 14 02-12-2009 15:09:13
Dbgrid para insertar en una tabla pero cogiendo datos de otra tabla taru MySQL 1 27-07-2006 15:36:12
insertar datos en una tabla desde otra Giniromero SQL 5 17-06-2004 19:37:16
Como insertar datos de una tabla en otra tabla? Salomon Firebird e Interbase 1 28-08-2003 11:29:40


La franja horaria es GMT +2. Ahora son las 19:36:53.


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