Delphi Can
StringList en hızlı aktarım Veritabanı - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: StringList en hızlı aktarım Veritabanı (/showthread.php?tid=4955)

Sayfalar: 1 2 3


StringList en hızlı aktarım Veritabanı - info@guzelceker.com - 12-06-2020

değerli arkadaşlar aşağıdaki döngü haricinde stringliste daha hızlı ekleme şansı varmı?

MyFiles := TStringList.create();
try
Dm_Foto.FD_FotoView.First             ;
 while not Dm_Foto.FD_FotoView.eof do
 begin
 myfiles.Add(Dm_Foto.FD_FotoView.FieldByName('FULLYOL').AsString);
 Dm_Foto.FD_FotoView.Next;
 end;
finally
 MyFiles.Free;
end;

vt :firebird


StringList en hızlı aktarım Veritabanı - uparlayan - 12-06-2020

Eğer dataset'ten tek tek çekeceksen While döngüsünü FD_FotoView.DISABLECONTROLS ve FD_FotoView.ENABLECONTROLS arasına alabilirsin.

Daha pratiği ise listeyi veritabanından virgül ile ayrışmış ve tek satırda çekebilirsin. Bunun için Firebird'de SELECT ile LIST komutunu kullanabilirsin. Delphi tarafında ise MyFiles.DelimitedText property'sine gelen veriyi doğrudan alabilirsin. ( Delimiter parametresini virgül yapmayı unutmayın )


Cvp: StringList en hızlı aktarım Veritabanı - info@guzelceker.com - 12-06-2020

(12-06-2020, Saat: 11:04)uparlayan Adlı Kullanıcıdan Alıntı: Eğer dataset'ten tek tek çekeceksen While döngüsünü FD_FotoView.DISABLECONTROLS ve FD_FotoView.ENABLECONTROLS arasına alabilirsin.

Daha pratiği ise listeyi veritabanından virgül ile ayrışmış ve tek satırda çekebilirsin. Bunun için Firebird'de SELECT ile LIST komutunu kullanabilirsin. Delphi tarafında ise MyFiles.DelimitedText property'sine gelen veriyi doğrudan alabilirsin. ( Delimiter parametresini virgül yapmayı unutmayın )

kayıt sayısı 9000 olan var SELECT ile LIST komutunu deniyecem anında sonuç verirmi acaba?


StringList en hızlı aktarım Veritabanı - eroniko - 12-06-2020

https://github.com/PacktPublishing/Delphi-High-Performance/ burda örnekleri var, control f ile string list şeklinde aratın, 
hangi yöntemin ne kadar performanslı olduğunu bulabilirsiniz.
daha detaylı bilgiler bu kitapta, herkese tavsiye ederim. çok faydalı bir kitap.
https://books.google.com.tr/books/about/Delphi_High_Performance.html?hl=ru&id=-uhODwAAQBAJ&redir_esc=y

4y7yd9.png

Hc0zPa.png


StringList en hızlı aktarım Veritabanı - mrmarman - 12-06-2020

Mevcut kayıtlar ile ne kadar süre aldığını merak ettim, bu soruyu sorduracak kadar yavaş ise sorunu veritabanı tarafından çözebilirsiniz.

Ekranda GRID var ve veritabanı buraya veri basıyorsa akışta ekranda bunu göstermek için kayıt başına bir PAINT süresi alacaktır. Bence sizin sorun burada.

@uparlayan 'ın WHILE EOF'dan hemen önce  DISABLECONTROLS ve END'den sonra da  ENABLECONTROLS şeklinde arasına alma fikrini mutlaka değerlendirin. Başka bir şeye ihtiyacınız kalmayacaktır.

NOT : Bir de aktif Grid'e bağlı FDQuery kullanmaktansa sadece bu işler için ve sadece dilediğiniz sayıda kayıt ve field çeken servis Query nesneniz olsun. Bunu dinamik/anonim olarak da lazım olduğunda CREATE edip try / finally ile oracıkta FREE edebilirsiniz.  Idea


Ekleme: PATH konusunda sürekli yinelenen kayıtları GROUP BY veya DISTINCT ile de sadeleştirip, 9000 kaydı 100-200 taneye de indirebilir performansı tavan yaptırabilirsiniz.


Cvp: StringList en hızlı aktarım Veritabanı - info@guzelceker.com - 12-06-2020

MyFiles := TStringList.create();
    MyFiles.Delimiter:=(',');
   try
   myfiles.Text:=(Dm_Foto.FD_FotoThum.FieldByName('FULLYOL').AsString);
    Form_AnaSayfa.Image.FillFromList( MyFiles);
   finally
     MyFiles.Free;
  
   end;

parametre hatalı diyor neyi yanlış yapıyorum

(12-06-2020, Saat: 12:07)mrmarman Adlı Kullanıcıdan Alıntı: Mevcut kayıtlar ile ne kadar süre aldığını merak ettim, bu soruyu sorduracak kadar yavaş ise sorunu veritabanı tarafından çözebilirsiniz.

Ekranda GRID var ve veritabanı buraya veri basıyorsa akışta ekranda bunu göstermek için kayıt başına bir PAINT süresi alacaktır. Bence sizin sorun burada.

@uparlayan 'ın WHILE EOF'dan hemen önce  DISABLECONTROLS ve END'den sonra da  ENABLECONTROLS şeklinde arasına alma fikrini mutlaka değerlendirin. Başka bir şeye ihtiyacınız kalmayacaktır.

NOT : Bir de aktif Grid'e bağlı FDQuery kullanmaktansa sadece bu işler için ve sadece dilediğiniz sayıda kayıt ve field çeken servis Query nesneniz olsun. Bunu dinamik/anonim olarak da lazım olduğunda CREATE edip try / finally ile oracıkta FREE edebilirsiniz.  Idea


Ekleme: PATH konusunda sürekli yinelenen kayıtları GROUP BY veya DISTINCT ile de sadeleştirip, 9000 kaydı 100-200 taneye de indirebilir performansı tavan yaptırabilirsiniz.

bazen mutluluğa giden yolda kalbim hızlı atmaya başlıyor korkuyorum... haklısınız bende 50 kayıt için denedim..normaldi.. 9000 kayıtta yavaşlar diye düşünmüştüm


StringList en hızlı aktarım Veritabanı - uparlayan - 12-06-2020

SELECT Cümlenizi paylaşırmısınız.

+

myfiles.Text :=(Dm_Foto.FD_FotoThum.FieldByName('FULLYOL').AsString);

değil,

myfiles.DelimitedText := (Dm_Foto.FD_FotoThum.FieldByName('FULLYOL').AsString);



Cvp: StringList en hızlı aktarım Veritabanı - info@guzelceker.com - 12-06-2020

(12-06-2020, Saat: 12:30)uparlayan Adlı Kullanıcıdan Alıntı: SELECT Cümlenizi paylaşırmısınız.

select ARSIVNO,LIST(FULLYOL) AS FULLYOL from FOTOLAR GROUP BY ARSIVNO ORDER BY ARSIVNO ASC



Form_AnaSayfa.ImageEnMView1.LockUpdate;
    MyFiles := TStringList.create();
    MyFiles.Delimiter:=(',');
   try
   myfiles.DelimitedText:=(Dm_Foto.FD_FotoThum.FieldByName('FULLYOL').AsString);

   Form_AnaSayfa.ImageEnMView1.Clear();
   Form_AnaSayfa.ImageEnMView1.FillFromList( MyFiles,'',true);
   finally
     MyFiles.Free;
     Form_AnaSayfa.ImageEnMView1.unLockUpdate;
   end;

bu şekildede olmadı


StringList en hızlı aktarım Veritabanı - uparlayan - 12-06-2020

Hata mesajı tam olarak nedir, paylaşır mısınız?


Cvp: StringList en hızlı aktarım Veritabanı - info@guzelceker.com - 12-06-2020

select ARSIVNO,LIST(FULLYOL) AS FULLYOL from FOTOLAR GROUP BY ARSIVNO ORDER BY ARSIVNO ASC

şimdi dikkatimi çekti 
fullyol (path) aslında aradaki boşluklarada virgül atmış LIST ek fonksiyonları mı var acaba

D:\DENEME\0000000005-MRAT,ÖZYURT,KARABACAK\0000000005-GN-0050.JPG,D:\DENEME\0000000005-MRAT,ÖZYURT,KARABACAK\0000000005-GN-0051.JPG,D:\DENEME\0000000005-MRAT,ÖZYURT,KARABACAK\0000000005-GN-0052.JPG


MRAT,ÖZYURT,KARABACAK