![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() 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. ![]() gracias |
#2
|
||||
|
||||
Código:
INSERT INTO TABLA T1 (CAMPO1, CAMPO2, CAMPO3) SELECT CAMPO1, CAMPO2, CAMPO3 FROM TABLA T2 WHERE T2.CAMPO1='XXXX' 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'
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. ![]() |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
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' 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!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. ![]() |
#5
|
|||
|
|||
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 ![]() Gracias |
#6
|
||||
|
||||
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;
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. ![]() |
#7
|
|||
|
|||
![]() 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; |
#8
|
||||
|
||||
Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. ![]() |
#9
|
|||
|
|||
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 |
#10
|
||||
|
||||
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#11
|
||||
|
||||
Cita:
Revisa si te sirve este [enlace]. Como te aconsejó Casimiro lee la guía de estilo, en especial el punto [8]. Saludos. ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
![]() |
|
|
![]() |
|