Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   insertar o modificar un registro completo a otro (https://www.clubdelphi.com/foros/showthread.php?t=2875)

osvrom 11-08-2003 17:13:24

insertar o modificar un registro completo a otro
 
Necesito saber si existe alguna forma si se puede hacer
que todos los campos de un registro se inserten en otro o actualicen otro sin necesidad de hacer un sql insert o update
especificando todos los campos y sus valores respectivamente.

Si es posible hacerlo con SQL y/o con Datasets.:confused:

gracias

delphi.com.ar 11-08-2003 17:16:41

Código:

INSERT INTO TABLA T1
(CAMPO1, CAMPO2, CAMPO3)
SELECT CAMPO1, CAMPO2, CAMPO3
FROM TABLA T2
WHERE T2.CAMPO1='XXXX'

Esta sintaxis varía en los diferentes motores
Código:

UPDATE TABLA T1
SET (CAMPO1, CAMPO2, CAMPO3) = (SELECT CAMPO1, CAMPO2, CAMPO3
              FROM TABLA T2
              WHERE T2.CAMPO1=T1.CAMPO1)
WHERE T1.CAMPO1='XXXX'

Saludos!

osvrom 11-08-2003 17:37:00

Primero muchas gracias por tu respuesta tan pronto.
Segundo mi siquiente inquietud es:
si o si tengo que escribir el nombre de todos los campos?? porque para tablas con muchos campos se hace una cadena muy larga que puede ser confusa.


Gracias

delphi.com.ar 11-08-2003 17:43:34

Yo siempre recomiendo que en los SQL de los programas definan explícitamente todos los campos, porque si en un futuro alguien agrega un campo en una tabla, es muy probable que estas consultas dejen de funcionar, aunque este no sería el caso porque estas tratando con la misma tabla.

Dos comentarios:

- En el insert lo mas normal es que pongas un campo con un valor constante, para que no se dupliquen registros, ej: (el 55)
Código:

INSERT INTO TABLA T1
(CAMPO1, CAMPO2, CAMPO3)
SELECT 55 CAMPO1, CAMPO2, CAMPO3
FROM TABLA T2
WHERE T2.CAMPO1='XXXX'

- El update que te pasé es medio inútil, porque esta haciendo un update de un registro con si mismo, la idea es que tome los datos de otro registro:
Código:

UPDATE TABLA T1
SET (CAMPO1, CAMPO2, CAMPO3) = (SELECT CAMPO1, CAMPO2, CAMPO3
              FROM TABLA T2
              WHERE T2.CAMPO1='XX2')
WHERE T1.CAMPO1='XXXX'


Saludos!

osvrom 11-08-2003 17:53:57

aparentemente el update con BDE no funciona esa igualdad de campos con el select parece que no le gusta.

Este es mi codigo de prueba
UPDATE prueba
SET (id, uno, dos) =

( SELECT id, uno, dos
FROM prueba1 p1
WHERE p1.id='2')

WHERE prueba.id='1'


Existiría alguna forma con datasets de hacer traspasos directos de la siguiente forma, es obvio que las dos tablas tiene que tener los mismos campos.

table1.record:=table2.record

o es muy loco lo que pido:cool:

Gracias

delphi.com.ar 11-08-2003 18:01:43

Si los campos estan en el mismo orden, puedes hacer un ciclo e igualar los campos.
Código:

procedure CopiarRegistros(ADataSet1, ADataSet2 :TDataSet);
var
  i: Integer;
begin
  for i := 0 to ADataSet1.Fields.Count-1 do
    ADataSet2.Fields[i].Value := ADataSet1.Fields[i].Value;
end;


osvrom 11-08-2003 18:21:40

muy buenísimo tu código, Gracias che.:)

La única acotación es que al dataset hay que ponerlo en estado de edición o inserción.


procedure TForm1.CopiarRegistros(ADataSet1, ADataSet2 :TDataSet);
var
i: Integer;
begin
AdataSet2.Insert;
// Adataset2.Edit;
for i := 0 to ADataSet1.Fields.Count-1 do begin
ADataSet2.Fields[i].Value := ADataSet1.Fields[i].Value;
end;
Adataset2.Post;
end;

delphi.com.ar 11-08-2003 18:29:07

Cita:

Posteado originalmente por osvrom
La única acotación es que al dataset hay que ponerlo en estado de edición o inserción.
Es que mi idea es que eso lo hagas de afuera del procedimiento, así te sirve tanto para inserts como para updates.

Saludos!

Ektor! 23-01-2013 18:53:11

Dudas relacionadas
 
Hola Buen día

Me parece muy buena todas sus aportaciones por lo que me gustaría extender un poco mas el tema y me pudieran ayudar con algunas dudas relacionadas que tengo.

Quisiera hacer un query en SQL Server que me devuelva todos los campos no nulos de una tabla y si hay una manera después de validar si un campo es nulo o no que se pueda actualizar en base a otro registro.
Y por ultimo si existe una manera de condicionar un mismo campo sin que me devuelva un true o false que son los casos de AND, OR, NOT, etc. esto es consultar diferentes valores de un mismo campo sin tener que usar un UNION haciendo la misma consulta

Espero que me puedan responder y cualquier duda o comentario es bienvenido.

Saludos y gracias

Casimiro Notevi 23-01-2013 19:38:23

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

ecfisa 23-01-2013 20:10:14

Cita:

Empezado por Ektor! (Mensaje 453917)
Quisiera hacer un query en SQL Server que me devuelva todos los campos no nulos de una tabla

Hola.

Revisa si te sirve este [enlace].

Como te aconsejó Casimiro lee la guía de estilo, en especial el punto [8].

Saludos. :)


La franja horaria es GMT +2. Ahora son las 07:43: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