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

 
 
Herramientas Buscar en Tema Desplegado
  #11  
Antiguo 22-09-2010
Avatar de Axel_Tech
Axel_Tech Axel_Tech is offline
Miembro
 
Registrado: nov 2008
Ubicación: lugar en que está ubicado algo.
Posts: 85
Poder: 16
Axel_Tech Va por buen camino
Cita:
Empezado por chingolo Ver Mensaje
porque no probas haciendo hilos de ejecucion?
o la manera mas facil es:

"INSERT INTO TU_TABLA_DESTINO VALUES (SELECT * FROM TU_TABLA_ORIGEN)"
esto copia todo el contenido del tu tabla origen a la de destino
luego haces un delete de tu talva origen y... listo el pollo pelada la gallina
Sería lo más fácil pero en este caso no se puede hacer eso porque son 2 tablas en 2 bd de distinto motor (Oracle y SQL Server).
A mí se me presentó una situción parecida (meter datos de una tabla de Access en una de Firebird) y lo hice de otra manera, aunque la idea es la misma: ir leyendo registro a registro de una e ir insertando en la otra. La principal diferencia radica en que no meto el valor de la propiedad Fields de un DataSet en el otro sino que leo un registro de la tabla origen, monto una cadena con un INSERT y lo meto en la tabla destino. Te muestro cómo, sólo que yo en vez de con TSimpleDataSet lo hice con Querys:

Código Delphi [-]
Query1.Active := False;
Query1.SQL.Clear;
Query1.SQL.Text = 'SELECT CAMPO1, CAMPO2, CAMPO3, CAMPO4, CAMPO5, CAMPO6 FROM TABLAORACLE';
Query1.Active := True;
Query1.First;

while not Query1.Eof do
  begin
    cad := '';
    cad := 'INSERT INTO TABLASQLSERVER (CAMPO1, CAMPO2, CAMPO3, CAMPO4, CAMPO5, CAMPO6) VALUES (';
    cad := cad + '' + Query1.FieldByName('CAMPO1').AsString + ',';
    cad := cad + '' + Query1.FieldByName('CAMPO2').AsString + ',';
    cad := cad + '' + Query1.FieldByName('CAMPO3').AsString + ',';
    cad := cad + '' + Query1.FieldByName('CAMPO4').AsString + ',';
    cad := cad + '' + Query1.FieldByName('CAMPO5').AsString + ',';
    cad := cad + '' + Query1.FieldByName('CAMPO6').AsString + ')';  //creamos la cadena con el insert into

    Query2.SQL.Clear;
    Query2.SQL.Text = cad;   //insertamos el nuevo registro
    Query2.ExecSQL;

    Query1.Next;
  end;

Más de 1600 registros con 5 columnas me lo hace en menos de 6 segundos, y mi equipo es bastante peor que el tuyo (AMD Sempron 1'8 Ghz y 512 de Ram) asique así a ojo lo tuyo no creo que tardara más de 4 minutos.

Por cierto, ¿no tendrás triggers before o after insert en la tabla de SQL Server? a ver si es que cada vez que insertas un registro se disparan y por eso te tarda tanto...
__________________
No hope, no dreams, no love, my only escape is Underground
Responder Con Cita
 



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 el contenido de un DataSet a otro DataSet Javi2 Varios 82 22-11-2022 09:26:16
Actualizar un dataset desde otro dataset jafera Conexión con bases de datos 17 18-12-2008 23:57:10
Conectar a un DataSet de otro form. DarkByte Conexión con bases de datos 15 10-09-2004 16:27:58
Vaciar el contenido de un directorio (Borrar *.*) Gelmin Varios 1 22-07-2004 20:21:50
Saber si un Tabla(dataset) esta siendo usado por otro componente cacuna OOP 3 26-05-2004 18:21:43


La franja horaria es GMT +2. Ahora son las 21:16:05.


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