Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

insert into tabla (select * from... ¿?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: insert into tabla (select * from... ¿? Responder citando

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

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 ?

Entonces, hice lo siguiente (está en delphi, pero creo que igual me pueden ayudar los que saben builder Razz)

Código:

        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;
        Qinte.Close;


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:
Código:

'Capability not supported'


Que podrá ser ?
Ojalá y me puedan ayudar, me urge mucho y ya he intentado de varias formas y no se deja...

Uso delphi 2006 y la base de datos es Access.

Gracias !
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Que tal jorges!

Pues por lo que veo falta la palabra VALUES en tu instrucción SQL. También debes de tomar en cuenta que el orden debe ser el mismo en ambas tablas y que ademas es el mismo numero de campos, porque de lo contrario habra errores.

Código:

Qinte := TQuery.Create(Self);
        Qinte.DatabaseName := 'Objetos';
        Qinte.RequestLive := True;
        Qinte.Close;
        Qinte.SQL.Text := 'insert into SOSTAT_RESUL_ORDEN VALUES(select * from SOSTAT_RESUL where SOSTAT_RESUL.PNTNAM like :interruptor)';
        Qinte.Prepare;
        Qinte.ParamByName('interruptor').AsString := interruptor;
        Qinte.Open;
        Qinte.Close;


Saludos
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Olvide mencionar que no el metodo correcto para ejecutar la instruccion es:

Código:

        Qinte.Execute 
        Qinte.Close;


Qinte.Open -> solo habre la consulta y aplica cuando se trata de un select. Cuando usas INSERT, DELETE, UPDATE el método a llamar es Execute.

Saludos
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Hola Buildero.

Gracias por contestarme, con respecto al Execute, tienes razón, se me pasó ese detalle. Sólo que en delphi se utiliza
Código:
ExecSQL;


Probé la sentencia de SQL como me dijiste, agregando 'Values':

Código:
Qinte.SQL.Text := 'insert into SOSTAT_RESUL_ORDEN VALUES(select * from SOSTAT_RESUL where SOSTAT_RESUL.PNTNAM like :interruptor)';


Pero, me da el siguiente error:

Código:

Invalid use of keyword.
Token: select
Line Number: 1.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

A mí me está pasando algo parecido, pero yoo ya sé porque es. Un TQuery que tenga en su clausula ORDER BY por ejemplo, no te permite modificarlo. Para poder modificarlo necesitas utilizar un TUpdateSQL, pero ese es otro cantar porque a día de hoy no sé como se le pueden pasar parámetros a este componente, que es un poco complicado de utilizar.
_________________
Ávila, ciudad patrimonio de la humanidad. Visítala.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Tienes razón, es ExecSQL, me confundi con la instrucción.

Pues bien, al parecer el BDE no soporta este tipo de instrucciones. He hecho una prueba con los componentes ADO (conectandome a una base de datos Access) y no tuve problemas.

Ej

Código:

    TADOQuery1->Close;
    TADOQuery1->SQL->Clear();
    TADOQuery1->SQL->Add("INSERT INTO Tabla1 SELECT * FROM Tabla1");
    TADOQuery1->ExecSQL();


Por otra parte la palabra VALUES no aplica para este tipo de instrucciones, por lo que también en eso me equivoque.

El resultado del ejemplo es insertar en la misma tabla el numero de registros con los que cuente en ese momento.

Saludos
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.