Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
insert into tabla values (select *... ¿?

Hola, que tal.
Tengo un TQuery con la siguiente instruccion SQL:

Código SQL [-]
select * from SOSTAT_RESUL where SOSTAT_RESUL.PNTNAM like :nomenclatura and SOSTAT_RESUL.SUBNAM like :sSubE order by SOSTAT_RESUL.PNTNAM

Esa instruccion me regresa una serie de registros que estan almacenados en una tabla y esos registros, necesito insertarlos en otra tabla.

El problema es que esos registros tienen muchísimos campos (como 70) y seria muy dificil hacer insert into tabla values (x1,x2,x3, ....,x70);.. se imaginan ?

Mi pregunta es saber si puedo hacer algo como:
Código SQL [-]
insert into tabla values (select * from SOSTAT_RESUL where SOSTAT_RESUL.PNTNAM like :nomenclatura and SOSTAT_RESUL.SUBNAM like :sSubE order by SOSTAT_RESUL.PNTNAM);

y como es uqe hay que hacerlo.

O que otra opción me dan.

Uso delphi 2006 y la base de datos esta en Access
Gracias !

Última edición por dec fecha: 05-04-2006 a las 17:40:50.
Responder Con Cita
  #2  
Antiguo 05-04-2006
Kosmo Kosmo is offline
Miembro
 
Registrado: Apr 2006
Posts: 21
Poder: 0
Kosmo Va por buen camino
Creo que se puede hacer mas o menos como tu has dicho:

Código SQL [-]
 
INSERT INTO MiTabla SELECT Campo1,Campo2,Campo3 FROM OtraTabla WHERE MiCampo='X'

Creo que algo asi funcionaría, sin poner "Values".

Además de esa versión, en caso de que la tabla no este creada, también tienes otra manera de hacerlo (que al menos funciona con bases de datos oracle, no se si con el resto también).

Código SQL [-]
 
SELECT * FROM MiTabla AS NuevaTabla

Eso lo que haría sería crearte una tabla con las columnas necesarias utilizando el mismo tipo de datos que las columnas de la tabla origen seleccionadas.

Espero te sirva
Responder Con Cita
  #3  
Antiguo 05-04-2006
Avatar de Bicho
[Bicho] Bicho is offline
Miembro Premium
 
Registrado: Jul 2003
Ubicación: Inca - Mallorca
Posts: 1.776
Poder: 17
Bicho Va por buen camino
Hola pasata por aquí.

Saludos
Responder Con Cita
  #4  
Antiguo 05-04-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Registrado
 
Registrado: Apr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 18
vtdeleon Va por buen camino
Saludos
Cita:
Empezado por jorgesl
Mi pregunta es saber si puedo hacer algo como:
Código SQL [-]
insert into tabla values (select * from SOSTAT_RESUL where SOSTAT_RESUL.PNTNAM like :nomenclatura and SOSTAT_RESUL.SUBNAM like :sSubE order by SOSTAT_RESUL.PNTNAM);
Si se puede, siempre que la consulta "Select" arroje la misma cantidad de campos que la tabla en "Insert". Si por alguna razon tienes insertar solo 60 campos (ej.) lamentablemente tendras que especificar cada campo.

Cita:
Empezado por jorgesl
y como es uqe hay que hacerlo.
Como lo veo arriba esta bien y como te escribi mas arriba: Campo en Inset = Campo en Select
Responder Con Cita
  #5  
Antiguo 05-04-2006
FOURIER FOURIER is offline
Miembro
 
Registrado: Dec 2005
Posts: 40
Poder: 0
FOURIER Va por buen camino
Esa serìa la manera

insert into tabla(CamposAgregar) select CamposAgregar from SOSTAT_RESUL where SOSTAT_RESUL.PNTNAM like :nomenclatura and SOSTAT_RESUL.SUBNAM like :sSubE order by SOSTAT_RESUL.PNTNAM;
Responder Con Cita
  #6  
Antiguo 05-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
Hago lo sigueinte:

Código Delphi [-]
       {}Qinte := TQuery.Create(Self);
        {}Qinte.DatabaseName := 'Objetos';
        {}Qinte.RequestLive := True;
        {}Qinte.Close;
        {}Qinte.SQL.Text := 'insert into SOSTAT_RESUL_ORDEN (select * from SOSTAT_RESUL where SOSTAT_RESUL.PNTNAM like :interruptor)';
        {}Qinte.Prepare;
        {}Qinte.ParamByName('interruptor').AsString := interruptor;
        {}Qinte.Open;
pero en Qinte.Prepare;

Marca el siguiente error:
Código:
'Invalid use of keyword.
Token: select
Line Number: 1.'
Si quito los parentesis entre lso que esta el select, el error que me marca dice: 'Capability not supported'

Última edición por jorgesl fecha: 05-04-2006 a las 22:11:44.
Responder Con Cita
  #7  
Antiguo 06-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
Vi un error que tengo:

Debo de hacer ExcecSQL en lugar de Open.
Pero igual sigue sin funcionar.

El error me lo da en el prepare.

Quice hacer la prueba simplemente haciendo
Código SQL [-]
insert into SOSTAT_RESUL (PNTNAM) values ("PRUEBA")

pero al llegar al momento donde se ejecuta el query, me dice que la tabla es de solo lectura...
Pero la tabla no es de solo lectura...

Ya me desespero ese error... es lo único que me falta para terminar mi proyecto
Responder Con Cita
  #8  
Antiguo 06-04-2006
JOSEA JOSEA is offline
Registrado
 
Registrado: May 2004
Posts: 9
Poder: 0
JOSEA Va por buen camino
Hola a todos.
Supongo que las dos tablas tendran campos similares, si es asi puede que te sirva esto (es un poco basto):
Código:
  query1.open;
  tablasegunda.BatchMove(query1,batappend);
  query1.close;
Responder Con Cita
  #9  
Antiguo 06-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
Genial !!
eso si funcionó a las mil maravillas !!

Gracias !
Responder Con Cita
  #10  
Antiguo 07-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
Hmm...

Creo que habñé demasiado rápido.

Con esa solución sí pude insertar los campos en la otra tabla, pero tiene un detalle.

El módulo que estoy haciendo, toma los registros de una tabla, los ordena de acuerdo a cierto criterio (muy especial y extraño, por cierto) y los inserta en otra tabla ya ordenados.

EL ordenamiento lo logro hacer en memoria, los datos los muestra ordenados por medio de un treeview (...ó Memo ó StringGrid). Por lo que la instrucci´pn de BatchMove la puse antes de hacer que la clave en la que estaba se mostrara en le programa, para que según yo, se insertaran en la tabla de la misma forma que se "insertan" en el StringGrid por ejemplo.

Pero la inserción en la tabla la hace de una forma completamente diferente, de hecho, creo que los campos los ingresa ordenados alfabeticamente (es así o será que solo estoy paranoico).

O acasi asi funciona esa función ?
Responder Con Cita
  #11  
Antiguo 07-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
Hey !!
SI, definitivamente si los ordena en orden alfabetico...
Hay alguna forma de que los ingrese secuencialmente ??
Responder Con Cita
  #12  
Antiguo 07-04-2006
JOSEA JOSEA is offline
Registrado
 
Registrado: May 2004
Posts: 9
Poder: 0
JOSEA Va por buen camino
Hola jorgesl:
No estoy muy seguro, pero si en la tabla que recibe los datos no tiene indices, creo que lo ingresará con el "order by" que tengas puesto en la Query.
Responder Con Cita
  #13  
Antiguo 07-04-2006
JOSEA JOSEA is offline
Registrado
 
Registrado: May 2004
Posts: 9
Poder: 0
JOSEA Va por buen camino
Definitivamente si jorgesl.
Hice la prueba ordenando por varios campos y los ingresa por el orden de la Query. Tambien lo hice sin poner order by en la Query y los inserta en el orden que encuentra en la tabla.
Responder Con Cita
  #14  
Antiguo 10-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
Esto es parte de lo que hago:

Código Delphi [-]
with query do
begin

...

      insSQL:='select * from SOSTAT_RESUL where PNTNAM like arametro and SUBNAM like :sSubE AND OBJNAM like "SUBESTACION%" order by PNTNAM';
      SQL.Text:= insSQL;
      Prepare;
      ParamByName('sSubE').AsString := sSubE;
      parametro := tipo + '-%';
      ParamByName('parametro').AsString := parametro;
      Open;
      First;
      while not EoF do
      begin
        objeto := FieldByName('PNTNAM').AsString;
        {}Qinte.SQL.Text := 'select * from SOSTAT_RESUL where PNTNAM like bjeto';
        {}Qinte.Prepare;
        {}Qinte.Prepare;
        {}Qinte.ParamByName('objeto').AsString := objeto;
        {}Qinte.Open;
        {}Table1.BatchMove(Qinte,batappend);
        {}Table1.Next;
        {}Qinte.Close;
...

end

Hay alguna manera de hacer que esa instruccion los agregue en el orden que los vaya encontrando en el query ?
osea, uno abajo del otro :P

Es lo unico que que necesito, con insert no funciona y lo que requiero es un insert, que siemrpe los reguistros los agregue al final de la tabla...

Esa instruccion sirve para mover el contenido de una tabla a otra, pero yo lo hago con un query, el contenido del query lo muevo a la tabla destino y el query, siempre me regresa un solo registro.
Responder Con Cita
  #15  
Antiguo 11-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
Sigo con el mismo prblema.
Ya traté haciendo
Código Delphi [-]
        {}Table1.BatchMove(Qinte,batCopy);

Pero al final, sólo deja la tabla con un registro (el último)
Responder Con Cita
  #16  
Antiguo 11-04-2006
jorgesl jorgesl is offline
Miembro
 
Registrado: Feb 2006
Ubicación: Torreón, Coahuila. México
Posts: 29
Poder: 0
jorgesl Va por buen camino
Algo muy raro ha pasado.

De repente funciono...
Código Delphi [-]
        {}Qinte.SQL.Text := 'select * from SOSTAT_RESUL where PNTNAM like bjeto';
        {}Qinte.Prepare;
        {}Qinte.ParamByName('objeto').AsString := objeto;
        {}Qinte.Open;
        {}Table1.BatchMove(Qinte,batAppend);
        {}Table1.Next;
        {}Qinte.Close;

Pero ahora quiero implementarlo en otra función... y lo hace mal de nuevo...
No entiendo
lo unico que cambia es Table1 por Table2...

Esta embrujado mi DevStudo 2006?
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Incorrect values within SQLDA structure fedelinardi SQL 5 01-02-2018 03:52:07
insertar al final de la tabla, sin que me los ponga hantes de los que ya estan insert sakuragi SQL 2 12-08-2005 22:32:12
insert a una tabla de otra tabla mas datos gmontes SQL 3 16-10-2004 17:04:51
select que me mueste los campos de una tabla cahosoft Oracle 1 01-10-2004 00:02:54
En el from del select puede ir una tabla query? cmena SQL 5 15-07-2004 17:05:04


La franja horaria es GMT +2. Ahora son las 19:41:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi