excel' e aktarımdaki yavaşlık

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

excel' e aktarımdaki yavaşlık

Mesaj gönderen bobasturk »

merhabalar,

tüm kayıtları çekip excele aktarma ve yazdırma işlemi pek kullanılmasada aklıma takıldığı ve sebebini araştırma isteği olduğundan bu soruyu sormak istedim.

firebird ile hazırlanmış tablomda bulunan verileri sorgulama sayfamda ibquery ile sorgulayarak çekiyorum ve button vasıtası ile excele aktarıyorum. belirli aralıkta veri çekip aktardığımda pek sorun yaşamıyorum ama tüm kayıtları çekip excele aktarmak istediğimde bariz bir yavaşlama oluyor. bazen duracak seviyeye geliyor. kayıtlarımın şu anki sayısı 3000 ne yaklaştı. kayıt sayısı da az 10 binler 100 binler veya milyonlar değil. Excele aktarımda kullandığım kod şöyle;

Kod: Tümünü seç

procedure TFormRaporSrg.RprSrg_BtnExYazClick(Sender: TObject);
var
  excel, sayfa: Variant ;
  d:integer;
  r:variant;
    begin
        Screen.Cursor := crHourGlass;
        excel:=createoleobject('excel.application');
        excel.workbooks.add;
        sayfa:=excel.workbooks[1].worksheets[1];
        r:=excel.activeworkbook.worksheets[1].cells[1];
        d:=0;
        r.cells[1,1]:='RAPOR NO';
        r.cells[1,2]:='İNCELEME TARİHİ';
        r.cells[1,3]:='MÜŞ.ADI SOYADI';
        r.cells[1,4]:='İZ DURUMU';
        r.cells[1,5]:='TESPİT DURUMU';

        raporsrgibquery.Open;
        raporsrgibquery.First;

    while Not raporsrgibquery.eof Do
    begin
      d:=d+1;
      r.cells[1+d,1]:=raporsrgibquery.FieldByName('RAPOR_NO').asstring;
      r.cells[1+d,2]:=raporsrgibquery.FieldByName('INCTARIHI').asdatetime;
      r.cells[1+d,3]:=raporsrgibquery.FieldByName('MUSTEKI').AsString;
      r.cells[1+d,4]:=raporsrgibquery.FieldByName('IZ_DURUMU').AsString;
      r.cells[1+d,5]:=raporsrgibquery.FieldByName('TESPIT_DURUMU').AsString;

      raporsrgibquery.Next;

      jvspecialprogress1.Maximum:=raporsrgibquery.RecordCount;
      jvspecialprogress1.Position:=raporsrgibquery.recno;
      jvspecialprogress1.TextOption:=topercent;
      jvprogressdialog1.Max:=raporsrgibquery.RecordCount;
      jvprogressdialog1.Position:=raporsrgibquery.recno;
      jvprogressdialog1.Text:=raporsrgibquery.FieldByName('RAPOR_NO').asstring;
      jvprogressdialog1.Show;
    end;

      excel.Columns.AutoFit; // burası colonlari ayarlar
      Screen.Cursor := crDefault;
      excel.visible:=true;
      excel:=unassigned;
end;
bu kodlar ile mi yanlış yapıyorum, yoksa bilgisayarın gücümü, başka bir şeymi çözemedim.
sorgularımı ibquery kullanarak ve tarihler arası kriter parametreleri girerek oluşturuyorum.

bu kodlamada bir hatam varmı acaba? yoksa başka bir yerde mi hata yapıyorum.

teşekkür ve saygılarımla
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bildiğim kadarı ile excel e aktarma işini bellekte yapmaya çalıştığından (excel gibi uzun bir .xls dosyasını kısmen okuma olayı gibi olmadığından) parça parça sorgulayıp bir den fazla .xls dosyası şeklinde aktarmak gerekiyor diye düşünüyorum. Daha sonra bu dosyalar tek tek açılıp excel ortamında kopyala/yapıştır ile birleştirilebilir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

viewtopic.php?t=6156&highlight=excel+ado

Hocam ole otomasyonu yerine bu yolla yaparsanız daha hızlı olabilir diye düşünüyorum.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

teşekkürler recep abi işin bellek boyutunu düşünmemiştim. dediğim gibi her nekadar verinin tümünü aktarma ve çıktı alma işi olmasa da belirttiğin konuya dikkat edip parça parça almaya çalışacağım.

kolay gelsin saygılarımla
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Cevapla