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 |
Código:
INSERT INTO TABLA T1 Código:
UPDATE TABLA T1 |
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 |
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 Código:
UPDATE TABLA T1 Saludos! |
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 |
Si los campos estan en el mismo orden, puedes hacer un ciclo e igualar los campos.
Código:
procedure CopiarRegistros(ADataSet1, ADataSet2 :TDataSet); |
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; |
Cita:
Saludos! |
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 |
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)
|
|
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