Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-06-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
copiar registros de una tabla a otra

Código Delphi [-]
      Close;
                SQL.Clear;
                SQL.Add('SELECT * FROM ventasareas');
                Open;
                articulo1 := FieldByName('articulo').value;
                cantidad1 := FieldByName('cantidad').value;
                precio1 := FieldByName('precio').value;
                fecha1 := FieldByName('fecha').value;


            Close;
            SQL.Clear;
            SQL.Add('INSERT INTO ventasdet (venta, orden, articulo, cantidad, precio,iva,devolucion, fecha)');
            SQL.Add('VALUES (:venta, rden, :articulo, :cantidad, recio, :iva,:devolucion,:fecha)');

            params.ParamByName('venta').Value :=  sVenta;
            params.ParamByName('orden').Value := IntToStr(i);
            params.ParamByName('articulo').Value := articulo1;
            params.ParamByName('cantidad').Value := cantidad1;
            params.ParamByName('precio').Value :=  precio1;
            params.ParamByName('iva').Value :=  rIva;
            params.ParamByName('devolucion').Value :=  riva;
            params.ParamByName('fecha').Value :=  fecha1;

Hola a todos este codigo me copia el primer registro de ventasareas a ventasdet

ahora mi pregunta es como puedo hacer para copiar todos los registros de ventasareas a ventasdet.. ya que ventasareas no solo tiene un registro si no mas..
alguien me puede ayudar ?

gracias
Responder Con Cita
  #2  
Antiguo 06-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Un bucle, por ejemplo, aprovechando un poco tu código:

Código Delphi [-]
SQL.Clear;                 
SQL.Add('SELECT * FROM ventasareas');                 
Open; 
while not sql.eof dobegin
 SQL.articulo1 := FieldByName('articulo').value;
 SQL.cantidad1 := FieldByName('cantidad').value;
 etc...

 SQL2.Clear;
 SQL2.Add('INSERT INTO ventasdet (venta, orden, articulo, cantidad, precio,iva,devolucion, fecha)');
 SQL2.Add('VALUES (:venta, rden, :articulo, :cantidad, recio, :iva,:devolucion,:fecha)');
 SQL2.params.ParamByName('venta').Value :=  sVenta;
 SQL2.params.ParamByName('orden').Value := IntToStr(i);
 etc...     


 SQL.next;
end;

Última edición por Casimiro Notevi fecha: 06-06-2011 a las 10:44:15.
Responder Con Cita
  #3  
Antiguo 06-06-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
no funciona el bucle da error de que el query esta cerrado y no puede realizar la operacion
tampoco hay parametro sql.next
Responder Con Cita
  #4  
Antiguo 06-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ya sé que no funciona, tal y como he dicho antes, sólo he modificado un poco tu código para que te hagas una idea de cómo debe hacerse y para hacerte pensar un poco, que es la única forma en que se aprenden las cosas
Responder Con Cita
  #5  
Antiguo 06-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
A ver si te sirve esta "plantilla":

Código Delphi [-]
try
  Q1.Close;
  Q1.SQL.Text := 'select ...';
      
  Q2.Close;
  Q2.SQL.Text := 'insert into ...';
    
  Q1.Open;
  while not Q1.Eof do
  begin      
    Q2.Close;
    Q2.ParamByName('campo1').AsInteger := Q1.FieldByName('campo1').AsInteger;
    Q2.ParamByName('campo2').AsString  := Q1.FieldByName('campo2').AsString;
    etc.
    Q2.Execquery;      

    Q1.Next;
  end;

finally
  Q2.Transaction.CommitRetaining;
end;

Última edición por Casimiro Notevi fecha: 06-06-2011 a las 17:35:44.
Responder Con Cita
  #6  
Antiguo 06-06-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
queria saber si en el codigo que he puesto se le puede agregar unas lineas .. un bucle como me lo mencionaste al inicio.. ya que no quisiera cambiarlo por otro codigo distinto..

solo es cuestion de que quiero aprenderlo asi...
Responder Con Cita
  #7  
Antiguo 06-06-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Claro, fíjate en la "plantilla" que te he puesto, sólo has de seguir esa estructura con tu código.
Responder Con Cita
  #8  
Antiguo 06-06-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
Código Delphi [-]
          try
           dmdatos.qryconsulta.Close;
           dmdatos.qryconsulta.SQL.Clear;
           dmdatos.qryconsulta.SQL.Add('SELECT * FROM ventasareas');

           dmdatos.qrymodifica.Close;
           dmdatos.qrymodifica.SQL.Clear;
           dmdatos.qrymodifica.SQL.Add('INSERT INTO ventasdet (venta, orden, articulo, cantidad, precio,iva,devolucion, fecha)');
           dmdatos.qrymodifica.SQL.Add('VALUES (:venta, rden, :articulo, :cantidad, recio, :iva,:devolucion,:fecha)');

           dmdatos.qryconsulta.open;

           while not dmdatos.qryconsulta.Eof do
           begin
           articulo1 := dmdatos.qryconsulta.FieldByName('articulo').value;
           cantidad1 := dmdatos.qryconsulta.FieldByName('cantidad').value;
           precio1 := dmdatos.qryconsulta.FieldByName('precio').value;
           fecha1 := dmdatos.qryconsulta.FieldByName('fecha').value;

           dmdatos.qrymodifica.params.ParamByName('venta').Value :=  sVenta;
           dmdatos.qrymodifica.params.ParamByName('orden').Value := IntToStr(i);
           dmdatos.qrymodifica.params.ParamByName('articulo').Value := articulo1;
           dmdatos.qrymodifica.params.ParamByName('cantidad').Value := cantidad1;
           dmdatos.qrymodifica.params.ParamByName('precio').Value :=  precio1;
           dmdatos.qrymodifica.params.ParamByName('iva').Value :=  rIva;
           dmdatos.qrymodifica.params.ParamByName('devolucion').Value :=  riva;
           dmdatos.qrymodifica.params.ParamByName('fecha').Value :=  fecha1;

           dmdatos.qrymodifica.open;
           dmdatos.qryconsulta.next;
            //ExecSQL;
           end;
           finally
           dmdatos.qrymodifica.Transaction.CommitRetaining;
           end;

no funciona la estructura.. osea compila normal pero sigue copiando solo la primera linea
Responder Con Cita
  #9  
Antiguo 06-06-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Para que funcione deberías hacer la instrucción de insertar y de guardar los cambios dentro del bucle, ¿no?, para que lo haga con todos los registros.

Saludos.
Responder Con Cita
  #10  
Antiguo 06-06-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
Código Delphi [-]
 for i := 0 to grdDatos.RowCount - 1 do begin
            Close;
            SQL.Clear;
            SQL.Add('INSERT INTO ventasdet (venta, orden, articulo, cantidad, precio,');
            SQL.Add('iva, descuento, juego, devolucion, ventareforden, comentario, fecha, cantidad_cnt) VALUES(');
            SQL.Add(sVenta + ',' + IntToStr(i) + ',');
            SQL.Add(grdDatos.Cells[0,i] + ',');
            SQL.Add(grdDatos.Cells[3,i] + ',');
            SQL.Add(grdDatos.Cells[4,i] + ',');
            SQL.Add(grdDatos.Cells[5,i] + ',');
            SQL.Add(grdDatos.Cells[8,i] + ',0,0,');
            if(grdDatos.Cells[12,i] = '') then
                SQL.Add('null,')
            else
                SQL.Add(grdDatos.Cells[12,i] + ',');
            SQL.Add(sClaveComent + ',' + QuotedStr(grdDatos.Cells[15,i]) + ',');
            SQL.Add('''' + grdDatos.Cells[16,i] + ''')');
            ExecSQL;

ese codigo por ejemplo si funciona pero con un stringgrid.. yo no quiero eso queria hacerlo como en el codigo que puse ya que no uso un stringgrid si no un cxgrid

alguna otra sugerencia ? ya que me da error si meto el insert dentro del bucle tambien
gracias
Responder Con Cita
  #11  
Antiguo 07-06-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
¿Podrías poner que error es el que te da?
¿Podrías poner el código como lo has puesto para que te de el error?
Responder Con Cita
  #12  
Antiguo 07-06-2011
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
Hola.

No entiendo por que no lo realizas como te sugirío Casimiro, de ese modo funciona correctamente.

Código Delphi [-]
...
begin
  qyVtasArea.SQL.Clear;
  qyVtasArea.SQL.Add('SELECT * FROM VENTASAREAS');
  qyVtasArea.Open;
  qyVtasDet.SQL.Clear;
  qyVtasDet.SQL.Add('INSERT INTO VENTASDET(VENTA,ORDEN,ARTICULO,CANTIDAD,PRECIO,IVA,DEVOLUCION,FECHA)');
  qyVtasDet.SQL.Add('VALUES(:VENTA,:ORDEN,:ARTICULO,:CANTIDAD,:PRECIO,:IVA,:DEVOLUCION,:FECHA)');
  while not qyVtasArea.Eof do
  begin
    qyVtasDet.ParamByName('VENTA').Value:= qyVtasArea.FieldByName('VENTA').Value;
    qyVtasDet.ParamByName('ORDEN').Value:= qyVtasArea.FieldByName('ORDEN').Value;
    qyVtasDet.ParamByName('ARTICULO').Value:= qyVtasArea.FieldByName('ARTICULO').Value;
    qyVtasDet.ParamByName('PRECIO').Value:= qyVtasArea.FieldByName('PRECIO').Value;
    qyVtasDet.ParamByName('IVA').Value:= qyVtasArea.FieldByName('IVA').Value;
    qyVtasDet.ParamByName('DEVOLUCION').Value:= qyVtasArea.FieldByName('DEVOLUCION').Value;
    qyVtasDet.ParamByName('FECHA').Value:= qyVtasArea.FieldByName('FECHA').Value;
    qyVtasDet.ExecSQL;
    qyVtasArea.Next;
  end;
  qyVtasDetqyVtasArea.Close;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-06-2011 a las 14:42:45.
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
Copiar registro de una Tabla a otra Tabla, sin repetirse MaMu Conexión con bases de datos 22 11-04-2013 16:29:11
enviar registros de una tabla a un campo de otra tabla a travez de ciclo IF en MYSQL CLUSTERBIT SQL 8 23-10-2008 16:50:03
copiar ciertos registros de una tabla a otra JESUSNET Conexión con bases de datos 2 07-06-2008 17:53:13
Mysql: copiar los campos de una tabla de una base de datos a otra tabla de otra base? patriram MySQL 4 02-11-2007 17:00:24
Copiar registros de una tabla a otra en Access con Delphi Gelmin Conexión con bases de datos 1 01-07-2005 13:35:04


La franja horaria es GMT +2. Ahora son las 23:40:13.


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