Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-02-2010
Avatar de Raynel
Raynel Raynel is offline
Miembro
 
Registrado: sep 2007
Posts: 40
Poder: 0
Raynel Va por buen camino
Ahorro de recursos

Saludos miembros del foro, tengo un problema al importar de un libro de excel a base de datos paradox. éste pone muy lento la máquina al punto que todo se congela. ¿No habrá una guía o algún tutorial de cómo ahorrar recursos al utilizar Delphi como lenguaje? Nota: el algoritmo de importación lo saqué de los foros. Gracias por las respuesta.
__________________
Codito, Ergo Sum.
Responder Con Cita
  #2  
Antiguo 05-02-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿qué algoritmo?
Responder Con Cita
  #3  
Antiguo 05-02-2010
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Cita:
Empezado por Raynel Ver Mensaje
Saludos miembros del foro, tengo un problema al importar de un libro de excel a base de datos paradox. éste pone muy lento la máquina al punto que todo se congela. ¿No habrá una guía o algún tutorial de cómo ahorrar recursos al utilizar Delphi como lenguaje? Nota: el algoritmo de importación lo saqué de los foros. Gracias por las respuesta.
¿Podrías darnos una referencia de ese algoritmo y también un aproximación de cuántas filas y columnas tiene el documento original?

Es posible que convenga hacer el copiado con sentencias SQL Insert Into, pues si estás acumulando todos los registros en la memoria de un data set usando el método Insert / Append, puede consumir una cantidad de memoria considerable si la hoja de Excel contiene mucha información.

Saludos.

Al González.
Responder Con Cita
  #4  
Antiguo 05-02-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Coincido con Casimiro; hay que ser más explícitos. Pero, en términos generales puedo comentarte que conozco dos formas de acceder a datos de Excel: con OLE o con ADO. Con OLE usas los componentes de la paleta Servers ysuel ser muy lento, sobre todo si son muchos datos. Con ADO accede a los datos como si estuvieran en una tabla de una base de datos y el proceso es mucho más rápido. Por si te sirve, aquí hay un ejemplo de cómo usar ADO para transferir datos de una hoja de excel a una tabla de paradox.

// Saludos
Responder Con Cita
  #5  
Antiguo 05-02-2010
Avatar de Raynel
Raynel Raynel is offline
Miembro
 
Registrado: sep 2007
Posts: 40
Poder: 0
Raynel Va por buen camino
Bueno en realidad no es el algoritmo, pero ayuda el código; y si, usa funciones OLE. Pero en realidad sería estupendo alguna guía sobre el ahorro de recursos, cuándo aplicarlas y todo eso. El documento en excel posee más de 10000 filas (y en aumento) y 16 campos cada una.
Este es el código, disculpen el erróneo concepto de "algoritmo" para este ejemplo .

Código Delphi [-]
begin
Button1.Enabled := False;     
xls := CreateOleObject('Excel.Application');     
xls.WorkBooks.Open( OpenDialog1.FileName );     
xls.Visible := false;     
fLoop := true;    
iFila := 2;     
while fLoop do     
begin       
if VarToStr( xls.WorkSheets[1].Cells[iFila,1].Value ) = '' then        
 fLoop := false      
 else 
begin        
 inc(iFila);         
Label1.Caption := 'Procesando ...';         
Label1.Update;        
end;    
 end;   
Total:=iFila;   
ProgressBar1.Max:=iFila;   
try     fLoop := true;    
 iFila := 2; // Fila donde está el primer dato a importar     
while fLoop do    
 begin      
 if VarToStr( xls.WorkSheets[1].Cells[iFila,1].Value ) = '' then        
 fLoop := false       
else       
begin       
Dia:=StrtoDate(VarToStr( xls.WorkSheets[1].Cells[iFila,1].Value));      
Loteria:=VarToStr( xls.WorkSheets[1].Cells[iFila,2].Value);       
Query1.Close;      
 Query1.SQL.Clear;       
Query1.SQL.Text:='SELECT * FROM Tabla WHERE (Campo1 = :C1) AND (Campo2 = :C2)';
Query1.SQL.Text:=Format(Consulta,[QuotedSTr(Loteria)]);       
Query1.ParamByName('C1').asString := Campo1;      
Query1.ParamByName('C2').asDate := Campo2;       
Query1.RequestLive := true;      
 Query1.Open;       
if Query1.IsEmpty then        
Begin         
 Query2.Close;         
 Query2.SQL.Clear;          
Query2.SQL.Text:='SELECT Campo3 FROM Tabla WHERE (Campo3 = :C3)';         
Query2.ParamByName('Lot').asString := Campo1;          
Query2.RequestLive := true;          
Query2.Open;         
if Query2.IsEmpty then            
 Begin              
Query2.Insert;              
Query2.FieldByName('Campo2').AsString:=C2;              
Query2.Post;             
end;         
Query1.Insert;
Query1.FieldByName('Campo0').AsInteger := Table1.RecordCount+1;
Query1.FieldByName('Campo1').AsDateTime := StrtoDate(VarToStr( xls.WorkSheets[1].Cells[iFila,1].Value));
Query1.FieldByName('Campo3').AsString := VarToStr( xls.WorkSheets[1].Cells[iFila,2].Value);         
triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,3].Value);         
Query1.FieldByName('C4').AsString := completarceros(triple);        
 triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,4].Value);         
Query1.FieldByName('C5').AsString :=completarceros(triple);         
triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,5].Value);        
 Query1.FieldByName('C6').AsString :=completarceros(triple);        
 triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,6].Value);         
Query1.FieldByName('C7').AsString :=completarceros(triple);         
triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,7].Value);        
 Query1.FieldByName('C8').AsString :=completarceros(triple);         
triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,8].Value);         
Query1.FieldByName('C9').AsString :=completarceros(triple);         
triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,9].Value);         
Query1.FieldByName('C10').AsString :=completarceros(triple);         
triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,10].Value);         
Query1.FieldByName('C11').AsString :=completarceros(triple);         
triple:=VarToStr( xls.WorkSheets[1].Cells[iFila,11].Value);        
 Query1.FieldByName('C12').AsString :=completarceros(triple);         
Query1.Post;       
 end;       
end;       
inc(iFila);       
Porc:=IFila*100/Total;      
 Label1.Caption := FloattoStr(Trunc(Porc))+'%';       
ProgressBar1.StepIt;       
Label1.Update;     
end    
finally     
xls.Quit    
end;
__________________
Codito, Ergo Sum.

Última edición por Raynel fecha: 05-02-2010 a las 20:05:29.
Responder Con Cita
  #6  
Antiguo 05-02-2010
Avatar de Raynel
Raynel Raynel is offline
Miembro
 
Registrado: sep 2007
Posts: 40
Poder: 0
Raynel Va por buen camino
Cita:
Empezado por roman Ver Mensaje
Coincido con Casimiro; hay que ser más explícitos. Pero, en términos generales puedo comentarte que conozco dos formas de acceder a datos de Excel: con OLE o con ADO. Con OLE usas los componentes de la paleta Servers ysuel ser muy lento, sobre todo si son muchos datos. Con ADO accede a los datos como si estuvieran en una tabla de una base de datos y el proceso es mucho más rápido. Por si te sirve, aquí hay un ejemplo de cómo usar ADO para transferir datos de una hoja de excel a una tabla de paradox.

// Saludos
Busqué el enlace de Roman, excelente para lo que quiero, gracias por el interés en responder....
__________________
Codito, Ergo Sum.
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
Ahorro de energia mamcx Debates 11 04-06-2007 20:33:35
utilizar recursos b2k Varios 4 23-05-2007 02:55:07
Recursos de simulacion eliash Varios 0 26-12-2005 14:17:58
Problema recursos ??? chele Varios 8 15-07-2004 16:34:40
Instalar recursos lbidi Varios 5 15-05-2004 01:52:33


La franja horaria es GMT +2. Ahora son las 21:53:44.


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