![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Creo que la sugerencia del amigo Roman, es acertada.
La propiedad Value de un TFields es de tipo Variant, con lo cual el usar un vector de tipo Variant no tiene justificacion. Ademas en cada ciclo de lectura de sql_Origen, estas dimensionando el vector, creo que eso se debe hacer antes de iniciar el ciclo de lectura una sola vez. Alternativa 1:
Alternativa 2: Saludos... |
|
#2
|
||||
|
||||
|
Hola TaaDow.
Lo que más lentitud le causa a ese ciclo es que en cada pasada estás llamando al método ApplyUpdates y éste internamente dispara la apertura y cierre automáticos de una trasacción —¡una transacción por registro!— en la base de datos destino (suponiendo que no hay ya una trasacción abierta antes de iniciar el proceso). Coloca esa sentencia fuera (después) del While, con lo cual seguramente se reducirá significativamente el tiempo que consume la operación. Dinos cómo te funciona de esa manera. Un saludo. Al González. ![]() |
|
#3
|
|||
|
|||
|
Cita:
Aplique la alternativa dos, siguiendo el consejo Al Gonzales, del applyupdates afuera del ciclo, despues de 5 horas en un 87% mi pc(w7,c2duo,3gb ram) se quedo sin memoria. procesando un dataset de 7 columnas por 52mil registros. Tratare de dividir el dataset por paquetes mas pequeños, de 10mil o 5mil registros. Gracias por sus respuestas. |
|
#4
|
||||
|
||||
|
Cita:
Después de lo que describes, pareciera como si nunca llegara a cumplirse la condición del While, vaya, como si la sentencia sql_Origen.Next no se ejecutara o algún evento moviera el cursor después de su acción. ¿Tienes manejadores de eventos asociados a sql_Origen? |
|
#5
|
|||
|
|||
|
Al Gonzales, gracias por contestar, cuando dejo el applyupdates adentro del while, es si termina de hacer el copiado, el problema es que se demora bastante, tengo asociado a la funcion solo una barra de progreso, y el boton que lanza la funcion, hago pruebas con 2000 registros y lo hace rapido, pero ya con esa carga, lo hace muy lento.
es mi primer reto con delphi, no tengo el criterio o la suficiente experiencia para saber si es normal que se demore tanto, alguna sugerencia? |
|
#6
|
||||
|
||||
|
Una idea: ¿pasa lo mismo si comentas las sentencias que tienen que ver con la barra de progreso?
|
|
#7
|
|||
|
|||
|
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 Última edición por chingolo fecha: 22-09-2010 a las 05:41:22. Razón: mas info |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Copiar el contenido de un DataSet a otro DataSet | Javi2 | Varios | 88 | 22-11-2025 22:17:42 |
| 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 |
|