Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
Question Opciones para copiar registros de una tabla a otra

hola amigos
tengo la siguiente pregunta, estoy haciendo una pequeña aplicacion donde uno 2 tablas paradox para formar una sola
lo hago por medio de
1 query2 y table2

este es el codigo aqui selecciono todos los campos

Código Delphi [-]

consult:='select * from cuentas.db '+
' union '+
' select * from BdOld\cuentas.db ';

query1.SQL.Clear;
query1.SQL.Add(consult);

query2.Active := true;

table2.DatabaseName := 'Reporte';
table2.TableName := 'tableunion';

 table2.Open;

while not query2.Eof do
   table2.Append;
  begin
     for I := 0 to query2.fields.Count - 1 do
        begin
          table2.Fields[i].Value := query2.Fields[i].Value;
          table2.post;
         query2.Next;
        end;
   end;

y excelente todo muy bien

pero ahora por necesidad tengo un campo llamado noreg, que es key primary
y me guarda el no de registro q se va guardando, y este campo lo deseo colocar con un nuevo numero segun se vaya guardando en la nueva base o la union de las 2 bases y hago lo siguiente :

Código Delphi [-]
consult:='select cliente, fecha, importe, fechaven, descuento from cuentas.db '+
' union '+
' select cliente, fecha, importe, fechaven, descuento from BdOld\cuentas.db  order by fecha desc';

// selecciono todos los campos exepto noreg

query1.SQL.Clear;
query1.SQL.Add(consult);

query2.Active := true;

table2.DatabaseName := 'Reporte';
table2.TableName := 'tableunion';
nr:=query2.RecordCount;  // para gravar noreg con nuevo num. de registro
 table2.Open;
table2.Append;
while not query2.Eof do
   
  begin
    // for I := 0 to query2.fields.Count - 1 do    omiti esto 
       // begin
        //  table2.Fields[i].Value := query2.Fields[i].Value;  omiti esto

           table2.FieldByName('noreg').AsInteger:=nr;
           table2.FieldByName('cliente'):=query2.FieldValues['cliente'];
           table2.FieldByName('fecha'):=query2.FieldValues['fecha'];
           table2.FieldByName('importe'):=query2.FieldValues['importe'];
           table2.FieldByName('fechaven'):=query2.FieldValues['fechaven'];
           table2.FieldByName('descuento'):=query2.FieldValues['descuento'];

          table2.insert;
         query2.Next;
         nr:=nr-1;
       // end;
   end;

ahora mi pregunta es la siguiente
¿habra una forma de tomar todos los registros del query2 y solo anexar el valor del campo noreg por medio de variable ?

mas sencillo es un buen capturar todos los registros puesto que tengo que pasar asi varias tablas y unas traen hasta 52 campos con el mismo campo noreg como key prymary

si anexo esto al codigo

Código Delphi [-]
for I := 0 to query2.fields.Count - 1 do    
        begin
          table2.Fields[i].Value := query2.Fields[i].Value;  
           table2.FieldByName('noreg').AsInteger:=nr;

y mando grabar me manda error
solo me funciona declarando todos los campos de uno por uno

Código Delphi [-]
table2.FieldByName('cliente'):=query2.FieldValues['cliente'];

espero haberme explicado
si alguien me puede ayudar se lo agradecere porque me faltan mas tabla por unir y como les comentaba hay algunas que traen hasta 52 campos esta es la mas peque y es un ejemplo

gracias saludos
Responder Con Cita
  #2  
Antiguo 09-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
y has probado de esta manera?

te pongo el pseudocodigo

Código Delphi [-]
 
while not eof...
Begin
table2.FieldByName('noreg').AsInteger:=nr;
for I := 1 to query2.fields.Count - 1 do
        begin
          table2.Fields[i].Value := query2.Fields[i].Value;
          table2.post;
         query2.Next;
        end;
end

osea colocar fuera del for el primer campo
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
error con el cambio

gracias oscarac
ya lo hice asi pero me marca error


raised exception class EVariantTypeCastError with message Could not convert variant of type (string) into type (date)

y tambien me dice

EDataBAseError with message invalid value for field fecha

¿alguna sugerencia? la verdad es que ya no se ni por donde
Responder Con Cita
  #4  
Antiguo 10-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
segun el ejemplo las 2 tablas tienen la misma estructura, pero mencionas que hay tablas que tienen hasta 52 campos... en esos casos como haces el query o solo los llamas con * (Select * from...)
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
nota

aun no llego ahi mi estimado primero estoy haciendo pruebas con las tablas mas chicas

y si no encuentro otra solucion tendre que declarar para cada campo el

Código Delphi [-]
table2.FieldByName('cliente'):=query2.FieldValues['cliente'];

el insert imaginate primero hacer el select, que es mas sencillo
y despues esto es demaciado codigo para el exe

pero creo que pasa me va desfasando y me graba nr en noreg y lo demas lo hace o mas bien lo recorre al insert

para darme a entender hay alguna posibilidad de de hacer esto :
Código Delphi [-]
  table2.FieldByName('noreg').AsInteger:=nr;

  table2.Fields[i].Value := nr+query2.Fields[i].Value;

no es posible hacer esto pero alguna funcion o algo parecido para que grabe el registro completo
eso es lo que veo que me haria bien
Responder Con Cita
  #6  
Antiguo 10-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
a ver a ver aver....
segun entendi lo que deseas hacer es unir 2 tablas en una nueva verdad?

si las tablas tienen los campos iguales entonces funcionaria perfectamente

Código Delphi [-]
 
table2.FieldByName('noreg').AsInteger:=nr;
for I := 1 to query2.fields.Count - 1 do
Begin
        table2.Fields[i].Value := query2.Fields[i].Value;
        table2.post;
       query2.Next;

end

ten cuidado con los Begin y los end, quiza ahi esta tu problema
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
asi es

asi es asi como tu lo pones es correto incluso lo ilustre desde el principio
ahora se me esta ocurriendo mejor desde select probar si hay una opción que me cuente los numeros de registros y por cada uno se lo asigno a noreg, se podra desde select , comandos sql ???
Responder Con Cita
  #8  
Antiguo 10-08-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
claro que si, espero que esto te sirva.
http://www.firebirdfaq.org/faq343/
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #9  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
gracias mightydragonlor

pero me funciona de paradox a paradox

o como seria de paradox a firebird

por que segun lei solo es para bases de datos en firebird

voy a leer a ver q se me ocurre una vez mas gracias
Responder Con Cita
  #10  
Antiguo 10-08-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
claro que si la consulta inicial es paradox, pues este no reconocerá esa sentencia, así que los mas indicado es agregar una columna al table, controlando por código el nro que desees.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #11  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
amigo creo que esta vez me declaro incompetente o estoy mega bloqueado

si tu ves mi sentencia la que esta arriba me podrias ilustrar como se haria ??

perdon pero ahora si ya me agarraron las prisas
Responder Con Cita
  #12  
Antiguo 10-08-2011
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Código Delphi [-]
for I := 1 to query2.fields.Count - 1 do
Begin
     table2.FieldByName('noreg').AsInteger:=I;
     table2.Fields[i].Value := query2.Fields[i].Value;
     table2.post;
     query2.Next;
end
Si te fijas, ya estas recorriendo los registros uno a uno, el I guarda el número de registro por así decirlo.
__________________
mas confundido que Garavito el día del Niño.
Responder Con Cita
  #13  
Antiguo 10-08-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 pmtzg.

Veo que oscarac y mightydragonlor coinciden con que te sugerí en el hilo anterior: 2 Tablas Paradox a Firebird

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 10-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
sigo pensando en que debes tener cuidado con los begin y end en tu bloque de codigo

Código Delphi [-]
 
for I := 1 to query2.fields.Count - 1 do
Begin
     table2.FieldByName('noreg').AsInteger:=I;
     table2.Fields[i].Value := query2.Fields[i].Value;
     table2.post;
     query2.Next;
end

creo que el post deberia estar fuera del bloque, porque solo te "grabaria" la primera modificacion y no veo un edit despues del query2.next
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #15  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
haciendo los cambios ahora me marca

table2ataset no in edit or insert mode

si lo cambio a insert

no graba bien los registros

graba en cada renglon un solo campo nada mas
Responder Con Cita
  #16  
Antiguo 10-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
Cita:
Empezado por pmtzg Ver Mensaje
haciendo los cambios ahora me marca

table2ataset no in edit or insert mode

si lo cambio a insert

no graba bien los registros

graba en cada renglon un solo campo nada mas
es por lo que te acabo de comentar en el comentario anterior.... estas haciendo post sin hacer edit o appen
debes sacar ese post fuera del bloque begin end...
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #17  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
lo volvi a crear distinto y me hace los mismo este es el codigo:

corregido ya funciona este codigo

Código Delphi [-]
procedure TForm2.Button4Click(Sender: TObject);
var
  I,nr: Integer;
begin
query2.DatabaseName := 'Report1';   {es un addalias con el path de files paradox}
query2.SQL.Clear;

{para q me funcionara agregue este a la consulta  (ctlpol) as num_reg }

consult := 'Select distinct (ctlpol) as num_reg, cclie, status, tipo_mov, no_factura, docto, refer, importe, '+
'fecha_apli, fecha_venc, cob, afec_coi, obs_cxccxp, bank_com, strcvevend, num_moned, '+
'tcambio, impmon_ext, cconrefer, fechaelab, usuario, ctlpol, cvefolio ' +
' from BdOld\cuen04 '+
'union '+
'Select  (ctlpol) as num_reg, cclie, status, tipo_mov, no_factura, docto, refer, importe, '+
'fecha_apli, fecha_venc, cob, afec_coi, obs_cxccxp, bank_com, strcvevend, num_moned, '+
'tcambio, impmon_ext, cconrefer, fechaelab, usuario, ctlpol, cvefolio ' +
'from cuen04  order by fecha_apli desc ' ;


query2.SQL.Add(consult);
query2.Active := true;
label1.Caption :='Total Reg.: '+ inttostr(query2.RecordCount);

//query2.First;
table2.DatabaseName := 'Report1';
table2.TableName := 'CONSULTA2';
g1.MinValue := 0;
g1.MaxValue := query2.RecordCount;
SHOWMESSAGE ('NO. REG.: '+inttostr(query2.RecordCount));
 table2.Open;
 //table2.Append;
 //query2.First;
 nr:=query2.RecordCount;  {total de registros en la base} 
 while not query2.Eof do
  begin
      table2.append;
     for I := 0 to query2.fields.Count - 1 do
        begin

          table2.FieldByName('num_reg').AsInteger:=nr;
           table2.Fields[i].Value := query2.Fields[i].Value;
        end;                           {aqui estaba mi error  modifique esto y a la consulta agrege el campo q se incrementa}
          table2.insert;
          query2.Next;
          g1.Progress := query2.RecNo;
           nr:=nr-1;
        

  end;

   table2.Close;
   query2.Close;
   showmessage ('Listo proceso terminado con exito ');

end;


quiza si estoy cometiendo un error y no me doy cuenta

Última edición por pmtzg fecha: 10-08-2011 a las 19:32:23.
Responder Con Cita
  #18  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
mi estimado oscarac

eres grande

por tu paciencia
ahora si ... ya quedo este asunto }

en verdad no lo pude ver tenias razon gracias mi amigo que amigo mi hermano
Responder Con Cita
  #19  
Antiguo 10-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
Cita:
Empezado por pmtzg Ver Mensaje
mi estimado oscarac

eres grande

por tu paciencia
ahora si ... ya quedo este asunto }

en verdad no lo pude ver tenias razon gracias mi amigo que amigo mi hermano
de nada.... en esta pagina tambien he recibido mucha ayuda...
P.D.
hermano hazme un prestamo... jajajajaja
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #20  
Antiguo 10-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 18
pmtzg Va por buen camino
ya estas

me ha hecho un gran favor y ya modifique para que cualquier persona q busque y en tu honor

sepa como orientarse


saludos y cuanto nece$$$$$itas jejejejeej
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 registros de una tabla a otra Rofocale Varios 11 07-06-2011 14:23:55
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
necesito ayuda para pasar registros a otra tabla ddd_ddd Conexión con bases de datos 2 09-09-2005 21:33:41
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 19:53:35.


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