28-06-2020, Saat: 12:27
(28-06-2020, Saat: 11:20)mrmarman Adlı Kullanıcıdan Alıntı: Süpersiniz, bahsettiğim işte buydu.
Toplam 1 tane kümülatif SQL + seçili Image adet SQL = az sayıda SQL erişimi yapıldı => maksimum performans
Hatta bunu 2 SQL'e kadar kısaltma imkanı var ya, buradaki örnekte gerek yok
Kasıt: WHERE FOTOGRAF IN ( tar1, tar2 tar3.... ) gibisinden. Döngüde bu true olanların FOTOGRAF field ile ilgili olanları bir String içerisinde yan yana virgüller koyarak döngünün sonunda SQL yazarak şeklinde...
var Fotos : String; begin Fotos := ''; for I := 0 to ImageEnMView1.ImageCount-1 do begin if ImageEnMView1.Checked[i] then begin Sonuc := AnsiPos('.' , ImageEnMView1.ImageFileName[i]); // “.” Kaçıncı karakter. Fotograf := AnsiRightStr(AnsiLeftStr(ImageEnMView1.ImageFileName[i] , Sonuc-1),4); // Noktadan öncesi if Fotos = '' then Fotos := QuotedStr( Fotograf ) else Fotos := Fotos + ', ' + QuotedStr( Fotograf ); end; end; // Elimizde Fotos değişkeni altında FOTOGRAF field için virgülle ayrılmış liste var... // ve henüz hiç SQL erişimi yapmadık try Dm_Foto.FD_FotoSorgu.Active:=false; // 1. SQL Dm_Foto.FD_FotoSorgu.SQL.Clear; Dm_Foto.FD_FotoSorgu.SQL.Add('UPDATE FOTO set CHECK1=0 WHERE ARSIVNO=:tar1'); Dm_Foto.FD_FotoSorgu.ParamByName('tar1').Value:=Dm_Kayit.FD_Musteriler.FieldByName('ARSIVNO').AsString; Dm_Foto.FD_FotoSorgu.ExecSQL; // 2.SQL Dm_Foto.FD_FotoSorgu.SQL.Clear; Dm_Foto.FD_FotoSorgu.SQL.Add('UPDATE FOTO set CHECK1=1 WHERE ARSIVNO=:tar1 AND FOTOGRAF IN ( ' + Fotos + ') '); Dm_Foto.FD_FotoSorgu.ParamByName('tar1').Value:=Dm_Kayit.FD_Musteriler.FieldByName('ARSIVNO').AsString; Dm_Foto.FD_FotoSorgu.ExecSQL; finally end; end;
mükemmel oldu..