Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Exportar a TXT-Mejorar rendimiento (https://www.clubdelphi.com/foros/showthread.php?t=43701)

andresenlared 17-05-2007 23:01:20

Exportar a TXT-Mejorar rendimiento
 
Saludos.

Necesito mejorar el rendimiento al exportar datos de un Objeto SimpleDataset de los IBexpert, este objeto se crea en runtime, y no se conocen los campos totales de la consulta. en este momento estoy haciendo un recorrido sobre el resultado de la consulta y un ciclo interno que me indica los campos y los valores los capturo en una cadena que luego la asigno al archivo. El proceso es muy lento...si conocen un metodo mas rapido o algo parecido al BUlk pero para exportar, porque siempre los datos que se recuperan estan entre los 200000 y millon.

Muchas gracias por su valiosa ayuda.


Código Delphi [-]
procedure TfrmGenerador.salvar_txt(datos: Tdataset);
var
 i,j:integer;
 archivo: Textfile;
 registro: String;
begin
  DBGrid1.Columns.SaveToFile('c:\plano.txt');
  AssignFile(archivo,ExtractFileDir(Application.ExeName) + '\tmp\Datos.txt');
  Rewrite(Archivo);
  datos.Prior;
  for i:=0 to datos.RecordCount-1 do
     begin
     registro:='';
       for j:=0 to datos.FieldCount-1 do
         if j=datos.FieldCount-1  then
           registro:=registro+VarToStr(datos.Fields[j].Value)
         else
           registro:=registro+VarToStr(datos.Fields[j].Value)+',';
       writeln(archivo,registro);
       datos.Next;
     end;
     CloseFile(archivo);
     ShowMessage('Archivo Exportado');
end;

andresenlared 17-05-2007 23:02:40

Que pena el codigo es delphi no php

jachguate 18-05-2007 00:01:15

En principio, el código que te envío debiera ejecutarse mas rápido... probalo e informanos de la diferencia en el desempeño.

Código Delphi [-]
procedure TfrmGenerador.salvar_txt(Datos: Tdataset);
var
  I: Integer;
  Registro: string;
  Strs: TStringList;
begin
  Strs := TStringList.Create;
  Datos.DisableControls;
  try
    Datos.First;
    while not Datos.Eof do
    begin
      Registro := '';
      for I := 0 to Datos.FieldCount - 1 do
        Registro := Registro + ',' + Datos.Fields[i].AsString;
      Delete(Registro, 1, 1);
      Strs.Add(Registro);
      Datos.Next;
    end;
    Strs.SaveToFile(ExtractFileDir(Application.ExeName) + '\tmp\Datos.txt');
  finally
    Strs.Free;
    Datos.EnableControls;
  end;
end;

Saludos.

delphi.com.ar 18-05-2007 01:19:29

Prueba esto:
http://www.clubdelphi.com/foros/show...46&postcount=4

jachguate 18-05-2007 01:56:00

Cita:

Empezado por delphi.com.ar
Prueba esto:

Federico... ¿estas seguro que esto trabaja con interbase/firebird?

lo digo, porque al parecer, ese es el origen de los datos:

Cita:

Empezado por andresenlared
Necesito mejorar el rendimiento al exportar datos de un Objeto SimpleDataset de los IBexpert

Hasta luego.

;)

delphi.com.ar 18-05-2007 03:33:20

Cita:

Empezado por jachguate
Federico... ¿estas seguro que esto trabaja con interbase/firebird?

lo digo, porque al parecer, ese es el origen de los datos:

Pues no.. es algo exclusivo de MS SqlServer, no me percaté del detalle. Respondí ciegamente ya que la pregunta se encuentra dentro del foro de Sql Server.

Saludos!

andresenlared 18-05-2007 17:04:19

Excelente
 
Muchas gracias Juan Antonio por tu colaboración, es super eficiente :)

jachguate 18-05-2007 23:04:47

por casualidad mediste los tiempos... ¿que tanto mejoró?

andresenlared 18-05-2007 23:10:24

Te cuento que paso de 20 minutos a 3 o 4 segundos...super mejoro...si tienes sitios de internet donde pueda aprender mas sobre temas relacionados ...te lo agradeceria

jachguate 19-05-2007 00:01:04

bien... esperaba una mejora sustancial con esa cantidad de registros.

Lamentablemente, desconozco sitios donde se trate el tema en concreto. Cuando inicié el interés por el tema, la lectura de la cara oculta de delphi y Mastering delphi me dieron los fundamentos.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 21:58:14.

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