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: 17
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: 20
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 09-08-2011
Avatar de pmtzg
pmtzg pmtzg is offline
Miembro
 
Registrado: jul 2007
Posts: 179
Poder: 17
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 09-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
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: 17
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: 20
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
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 13:23:55
copiar ciertos registros de una tabla a otra JESUSNET Conexión con bases de datos 2 07-06-2008 16: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 16:00:24
necesito ayuda para pasar registros a otra tabla ddd_ddd Conexión con bases de datos 2 09-09-2005 20:33:41
Copiar registros de una tabla a otra en Access con Delphi Gelmin Conexión con bases de datos 1 01-07-2005 12:35:04


La franja horaria es GMT +2. Ahora son las 10:24:21.


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