Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2003
osvrom osvrom is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 31
Poder: 0
osvrom Va por buen camino
Question 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.

gracias
Responder Con Cita
  #2  
Antiguo 11-08-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 11-08-2003
osvrom osvrom is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 31
Poder: 0
osvrom Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 11-08-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 11-08-2003
osvrom osvrom is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 31
Poder: 0
osvrom Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 11-08-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 11-08-2003
osvrom osvrom is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 31
Poder: 0
osvrom Va por buen camino
Thumbs up

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;
Responder Con Cita
  #8  
Antiguo 11-08-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 23-01-2013
Ektor! Ektor! is offline
Registrado
NULL
 
Registrado: ene 2013
Posts: 1
Poder: 0
Ektor! Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 23-01-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
Responder Con Cita
  #11  
Antiguo 23-01-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
Cita:
Empezado por Ektor! Ver Mensaje
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.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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


La franja horaria es GMT +2. Ahora son las 03:43:34.


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