Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Locate neden kaçırıyor
#11
(28-06-2020, Saat: 11:20)mrmarman Adlı Kullanıcıdan Alıntı: Süpersiniz, bahsettiğim işte buydu.   Idea
Toplam 1 tane kümülatif SQL +  seçili Image adet SQL = az sayıda SQL erişimi yapıldı => maksimum performans Smile

Hatta bunu 2 SQL'e kadar kısaltma imkanı var ya, buradaki örnekte gerek yok Smile  

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...  Tongue




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..
Cevapla
#12
(28-06-2020, Saat: 09:15)info@guzelceker.com Adlı Kullanıcıdan Alıntı:
var i:integer;
begin
Dm_kayit.FDBaglanKAYIT.StartTransaction;
Form_AnaSayfa.ImageEnMView1.UncheckAll;

 try
 Dm_Foto.FD_FotoView.DisableControls;
 Dm_Foto.FD_Foto.DisableControls;

   for I := 0 to ImageEnMView1.ImageCount-1 do
   begin
     Dm_Foto.FD_FotoView.Locate('FULLYOL',ImageEnMView1.ImageFileName[i],[locaseInsensitive]);
     Dm_Foto.FD_Foto.Locate('FOTOGRAF;UZANTI',VarArrayOf([Dm_Foto.FD_FotoView.FieldByName('FOTOGRAF').AsString,Dm_Foto.FD_FotoView.FieldByName('UZANTI').AsString]),[]);

     if ImageEnMView1.Checked[i]=true then
     begin
     Dm_Foto.FD_foto.Edit;
     Dm_Foto.FD_foto.FieldByName('CHECK1').AsInteger   :=1;
     Dm_Foto.FD_foto.Post;
     end else
     begin
     Dm_Foto.FD_foto.Edit;
     Dm_Foto.FD_foto.FieldByName('CHECK1').AsInteger   :=0;
     Dm_Foto.FD_foto.Post;
     end;
   end;

   Dm_kayit.FDBaglanKAYIT.Commit;
   Dm_Foto.FD_FotoView.Refresh;

   Dm_Foto.FD_FotoView.EnableControls;
   Dm_Foto.FD_Foto.EnableControls;

   HangiIslem:='FotoShow';
   Dm.Timer_FotoSecilenler.Enabled:=true;
 except
   Dm_kayit.FDBaglanKAYIT.Rollback;
   HangiIslem:='FotoShow';
   Dm.Timer_FotoSecilenler.Enabled:=true;
 end;
Close;
end;

locate arasıra odaklamıyor .. benmi yanlış bişeyler yapıyorum acaba

Merhaba, 

Sorunuz karşılık bulmuş ancak ben ilk baştaki mesaja binaen bir bilgi vermek istiyorum.

Yanlış :
for I:=0 To AnaSorgu.RecordCount-1 Do
begin
      AltSorgu.Locate('Alanadi','aranan',[]);
      Altsorgu.edit;
      AltsorguAlanAdi.Text:='aa';
      Altsorgu.post;
end;

şeklinde kullanmak yanlış sonuçlar ortaya çıkarma ihtimali yüksek olabilir. Locate i mutlaka if kontrolünde kullanınız.

Doğru :
for I:=0 To AnaSorgu.RecordCount-1 Do
begin
      If AltSorgu.Locate('Alanadi','aranan',[])=True then
      begin
            Altsorgu.edit;
            AltsorguAlanAdi.Text:='aa';
            Altsorgu.post;
      end;
end;

Böylelikle şart yerine gelirse gerekli değişikliği yapacaktır. Aksi takdir de, şart yerine gelmezse de değişikliği yapacaktır.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Photo Delphi 10.2 Neden Bu Kadar Yavaş SenayAkgun 10 3.941 01-11-2020, Saat: 22:32
Son Yorum: hayalyilmaz43
  Web Server Application yerine Remobjects neden tercih edilir pro_imaj 1 1.662 17-06-2020, Saat: 09:16
Son Yorum: TescilsizUzman
  Locate ve Lookup TR Karakter sorunu narkotik 3 3.612 15-06-2020, Saat: 16:49
Son Yorum: samsaros@gmail.com
  Nesne Neden Free Olmuyor? Halil Han BADEM 3 2.778 31-07-2019, Saat: 14:28
Son Yorum: sddk
  TCustomControl neden TRANSPARENT olmuyor? uparlayan 7 6.371 03-04-2018, Saat: 15:06
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi