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
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 )
(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?
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.
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.
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. 
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
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);
(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ı
Hata mesajı tam olarak nedir, paylaşır mısınız?
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