Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-04-2012
jlrbotella jlrbotella is offline
Miembro
 
Registrado: ene 2007
Posts: 185
Poder: 18
jlrbotella Va por buen camino
Cool

1) Para leer un fichero tan grande no uses el componente tmemo. Puedes usar:
Código:
var f : TextFile;      
lineaactual : string; 
begin   
      AssignFile('c:\test.txt', f);   
      try     
           Append(f);     
           while not Eof do begin       
               Readln(f, lineaactual);  //creo que es así, busca en la ayuda de Delphi para asegurarte       
               //aqui haces lo que quieras con lineaactual     
          end;   
     finally     
          Closefile(f);   
     end; 
end;
2º He visto un sleep(1). Tienes que eliminarlo.
Responder Con Cita
  #2  
Antiguo 03-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jlrbotella Ver Mensaje
1) Para leer un fichero tan grande no uses el componente tmemo. Puedes usar:
Código:
var f : TextFile;      
lineaactual : string; 
begin   
      AssignFile('c:\test.txt', f);   
      try     
           Append(f);     
           while not Eof do begin       
               Readln(f, lineaactual);  //creo que es así, busca en la ayuda de Delphi para asegurarte       
               //aqui haces lo que quieras con lineaactual     
          end;   
     finally     
          Closefile(f);   
     end; 
end;
2º He visto un sleep(1). Tienes que eliminarlo.
Me parece perfecto.
Además también quitaría el application.processmessages o que solamente lo hiciera cada ¿1000? registros.
Código Delphi [-]
if contador mod 100 then application.processmessages

Otra cosa, me ha parecido que lees a un clientdataset y luego sus valores lo pasas como parámetros a un stored procedure, ¿por qué no lo haces directamente?
Responder Con Cita
  #3  
Antiguo 04-04-2012
Chaja Chaja is offline
No confirmado
 
Registrado: ago 2004
Ubicación: Mar del Plata
Posts: 238
Poder: 0
Chaja Va por buen camino
El CDS, lo puse para que el user vea como se carga... no se... y el memo lo puse para que se vea el archivo a cargar.
si el sleep() lo puedo sacar, aunque es un milisegundo ....mmmm....si pero si saco bien la cuenta son como 45 minutos no?
Responder Con Cita
  #4  
Antiguo 04-04-2012
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Por que no muestras de 1..10 registros de esos 2.789.636 que tienes para ver otra forma de ayudarte.
El motor que usas es Interbase 7.5 el mio es SQL SERVER 2005, en ocasiones tengo que incorporar un fichero de texto más o menos parecido al tuyo, sólo que éste es de combustible y lleva 7 campos que tengo que extraer, hay fichero que tienen 2095 registro y sólo dura en leerlo 1 segundo, en tu caso (2.789.636 / 2095) = (1.331,5685 / 60) = 22,224 Seg. NO 10..36 Horas.

En SQL SERVER se crean dos ficheros que se llaman schema.ini y dgi.txt en tu caso.

Estructuras del fichero schema.ini
Cita:
[dgi.txt]
ColNameHeader=True
Format=Delimited(,)
CharacterSet=ANSI
Col1=Fecha Date
Col2=Vigencia Date
Col3=Cuit Char 11
Col4=Tasa_Percepcion Double
Col5=Tasa_Retencion Double
Col6=Vencimiento Date
Líneas del fichero dgi.txt
Cita:
Fecha, Vigencia, Cuit, Tasa_percepcion, Tasa_retencion, Vencimiento
........, ..........., ....., ......................, ....................., ...............
........, ..........., ....., ......................, ....................., ...............
........, ..........., ....., ......................, ....................., ...............
Mira si puedes hacer algo parecido para Interbase

Un saludo
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.

Última edición por olbeup fecha: 04-04-2012 a las 09:15:59.
Responder Con Cita
  #5  
Antiguo 04-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Chaja Ver Mensaje
El CDS, lo puse para que el user vea como se carga... no se... y el memo lo puse para que se vea el archivo a cargar.
si el sleep() lo puedo sacar, aunque es un milisegundo ....mmmm....si pero si saco bien la cuenta son como 45 minutos no?
En un proceso de ese tipo, el estar mostrando información al usuario es perder tiempo. En todo caso una barra de progreso, no más.
Quita todo lo que no sirva, la carga en el CDS la quitas también, el sleep no es un milisegundo realmente, además de que no sirve para nada.
Resumiendo, lo más simple y eficaz.
Responder Con Cita
  #6  
Antiguo 04-04-2012
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Además de eso, una sola instrucción insert parametrizada, para que la bbdd sólo la precompile una vez.


Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #7  
Antiguo 04-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por fjcg02 Ver Mensaje
Además de eso, una sola instrucción insert parametrizada, para que la bbdd sólo la precompile una vez.
Saludos
También, esa llamada al 'stored procedure' no tiene pinta de ser muy efectiva.
Creo que sería mejor un ibsql/fibsql/etc. precompilada (.prepare).
Responder Con Cita
  #8  
Antiguo 04-04-2012
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.

Otra cosa que puede ayudar:
Código Delphi [-]
  if posicion mod 100 = 0 then
     CDSTasas.MergeChangeLog;

Saludos.

Edito: Una consulta, ¿ Las líneas tienen una longitud fija de caracteres ?
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 04-04-2012 a las 13:48:13.
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
ingresar registro en delphi php y Mysql kurono PHP 1 06-06-2011 02:38:32
Alguna forma más eficiente de enviar HTML al navegador-cliente ??? chalao Internet 8 16-10-2008 18:23:03
Forma eficiente de manejar arrays de 10'000.000 cuadrados mamcx OOP 6 15-09-2006 21:01:12
¿Cómo Modificar un Registro de Tabla más Eficiente? MartinC MySQL 1 16-03-2005 14:04:31
Dar un valor a un registro en una tabla de forma automática vhirginia Conexión con bases de datos 3 26-04-2004 19:50:42


La franja horaria es GMT +2. Ahora son las 07:42:12.


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