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 05-08-2013
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por ozsWizzard Ver Mensaje
Otro matiz, creo que la "select" del "insert" ha de ir con parénteis.
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  with Query1 do begin         
    Close;         
    SQL.Clear;    
    SQL.Add('INSERT INTO detfactfinal');    
    SQL.Add('(SELECT * FROM detfactura)');    
    ExecSQL;     
    Close;    
    SQL.Clear;    
    SQL.Add('DELETE detfactura');    
    ExecSQL;   
  end; 
end;

Además, si la base de datos es Sql Server, se debe poner la lista de campos de las tablas

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject); 
begin 
  with Query1 do begin         
    Close;         
    SQL.Clear;    
    SQL.Add('INSERT INTO detfactfinal (Numdetfact, Numfact, Cod_art, Cantidad)');    <-- Te falta un ")"
    SQL.Add('(SELECT Numdetfact, Numfact, Cod_art, Cantidad FROM detfactura)');  <-- Puedes omitir los paréntesis
    ExecSQL;     
    Close;    
    SQL.Clear;    
    SQL.Add('DELETE detfactura');    
    ExecSQL;   
  end; 
end;
Si la base de datos es SQL SERVER lo puedes hacer todo en una sola consulta, Insertar, Borrar, Actualizar e incluso hacer un Select al final de la consulta.

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 05-08-2013 a las 10:26:52.
Responder Con Cita
  #2  
Antiguo 05-08-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Si la base de datos es SQL SERVER lo puedes hacer todo en una sola consulta, Insertar, Borrar, Actualizar e incluso hacer un Select al final de la consulta.

Un saludo.
El paréntesis me lo comí.
Los paréntesis del insert es por costumbre-

Y sobre lo de insertar, borrar y hacer select en Sql Server... ¿con el mismo TQuery?, eso sí que no lo sabía.¿cómo?
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #3  
Antiguo 05-08-2013
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Cita:
Empezado por ozsWizzard Ver Mensaje
El paréntesis me lo comí.
Los paréntesis del insert es por costumbre-

Y sobre lo de insertar, borrar y hacer select en Sql Server... ¿con el mismo TQuery?, eso sí que no lo sabía.¿cómo?
Hola ozsWizzard

Te pongo un ejemplo:

Código SQL [-]
DECLARE
  @myTable  TABLE
    (
      IDCLIENTE int IDENTITY(1,1)
      ,CLIENTE  varchar(50)
    )

INSERT INTO @myTable (CLIENTE) VALUES ('Pedro Mtnz')
INSERT INTO @myTable (CLIENTE) VALUES ('Antonio Martinez')
INSERT INTO @myTable (CLIENTE) VALUES ('Pedro Mtn')

DELETE 
  FROM @myTable 
  WHERE CLIENTE = 'Pedro Mtn'

UPDATE @myTable
  SET
    CLIENTE = 'Pedro Martinez'
  WHERE CLIENTE = 'Pedro Mtnz'

SELECT
    CLIENTE
  FROM @myTable

Un saludo.

P.D.: Siempre trabajo con ADO
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 05-08-2013 a las 12:59:03.
Responder Con Cita
  #4  
Antiguo 05-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Hola ozsWizzard

Te pongo un ejemplo:

Código SQL [-]DECLARE @myTable TABLE ( IDCLIENTE int IDENTITY(1,1) ,CLIENTE varchar(50) ) INSERT INTO @myTable (CLIENTE) VALUES ('Pedro Mtnz') INSERT INTO @myTable (CLIENTE) VALUES ('Antonio Martinez') INSERT INTO @myTable (CLIENTE) VALUES ('Pedro Mtn') DELETE FROM @myTable WHERE CLIENTE = 'Pedro Mtn' UPDATE @myTable SET CLIENTE = 'Pedro Martinez' WHERE CLIENTE = 'Pedro Mtnz' SELECT CLIENTE FROM @myTable


Un saludo.

P.D.: Siempre trabajo con ADO
Gracias lo probare a la noche, aunque no se que lenguaje estas utilizando olbeup, digo por mi falta de conocimiento nunca hice algo asi en SQL y la base que utilizo es Paradox (si ya se no coment, es solo para pruebas) gracias.
Responder Con Cita
  #5  
Antiguo 05-08-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Hola ozsWizzard

Te pongo un ejemplo:

Código SQL [-]
DECLARE
  @myTable  TABLE
    (
      IDCLIENTE int IDENTITY(1,1)
      ,CLIENTE  varchar(50)
    )

INSERT INTO @myTable (CLIENTE) VALUES ('Pedro Mtnz')
INSERT INTO @myTable (CLIENTE) VALUES ('Antonio Martinez')
INSERT INTO @myTable (CLIENTE) VALUES ('Pedro Mtn')

DELETE 
  FROM @myTable 
  WHERE CLIENTE = 'Pedro Mtn'

UPDATE @myTable
  SET
    CLIENTE = 'Pedro Martinez'
  WHERE CLIENTE = 'Pedro Mtnz'

SELECT
    CLIENTE
  FROM @myTable

Un saludo.

P.D.: Siempre trabajo con ADO
Nunca se me ha ocurrido meter todo eso seguido en el mismo execute, veo más claro hacer cada ejecución por su cuenta, para ejecutar todo eso haría un procedimiento almacenado.

Pero bueno, siempre se aprende algo nuevo, lo probaré un día de estos por curiosidad.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #6  
Antiguo 12-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Hola estuve probando lo visto acá, pero tengo un problema, hice dos botones uno que copia una tabla a la otra y un botón para limpiar, el asunto es que no me guarda nada, es todo temporal, no faltaría poner un Edit, Post algo así, perdón si digo una burrada, porque esto estaría funcionando solo faltaría que lo almacene de forma definitiva, muchas gracias.
Código Delphi [-]
procedure TForm14.BitBtn1Click(Sender: TObject);  // copia una factura a la otra
begin
with Query1 do
begin     
   Close;     
   SQL.Clear;
   SQL.Add('INSERT INTO detfacturafinal');
   SQL.Add('SELECT * FROM detfactura');
   ExecSQL;
end;
end;

procedure TForm14.SpeedButton3Click(Sender: TObject);//limpia la tabla detfactura
begin
with Query1 do
begin
  Close;
  SQL.Clear;
  SQL.Add('DELETE FROM detfactura');
  ExecSQL;
end;
end;
Les recuerdo que trabajo con Delphi 7 y Paradox, gracias.
Responder Con Cita
  #7  
Antiguo 12-08-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Falta iniciar una transacción y acabarla.

El componente TDatabase tiene un procedimiento "StartTransaction" que sirve para iniciar la transacción. Cuando acabes de hacer todas las operaciones que consideres oportunas, para acpetar los cambios se usa el procedimiento del mismo componente "Commit", si quieres cancelar los cambios, "Rollback", es decir:

Código Delphi [-]
procedure TForm14.BitBtn1Click(Sender: TObject);  // copia una factura a la otra
begin
   Database1.StartTransaction;
   try
      with Query1 do
      begin     
         Close;     
         SQL.Clear;
         SQL.Add('INSERT INTO detfacturafinal');
         SQL.Add('SELECT * FROM detfactura');
         ExecSQL;
      end;
      DataBase1.Commit;
   except      
      DataBase1.Rollback;
   end;
end;

procedure TForm14.SpeedButton3Click(Sender: TObject);//limpia la tabla detfactura
begin
   Database1.StartTransaction;
   try
      with Query1 do
      begin
         Close;
         SQL.Clear;
         SQL.Add('DELETE FROM detfactura');
         ExecSQL;
      end;
      DataBase1.Commit;
   except      
      DataBase1.Rollback;
   end;
end;
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #8  
Antiguo 12-08-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Ok pero debo poner el rollback en un boton, como un cancel, seria algo asi.
Botón cancel
Código Delphi [-]
   begin
DataBase1.Rollback;
   end;
No se si esta bien esto, nunca use este comando, agradezco tu ayuda.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar registro de una Tabla a otra Tabla, sin repetirse MaMu Conexión con bases de datos 22 11-04-2013 15:29:11
Mysql: copiar los campos de una tabla de una base de datos a otra tabla de otra base? patriram MySQL 4 02-11-2007 16:00:24
copiar datos de una tabla en otra fedelphi Firebird e Interbase 6 24-08-2007 03:59:36
Copiar un registro de una tabla en otra... JuanErasmo SQL 6 10-07-2007 23:08:15
Copiar Tabla de una BD a Otra BD en Firebird pcicom SQL 3 14-02-2005 16:31:15


La franja horaria es GMT +2. Ahora son las 18:56:04.


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