Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
StringList Yavaşlığı ve Güncelleme Sorunu
#1
procedure TForm1.FormCreate(Sender: TObject);
begin
FComboStrings := TStringList.Create;
fdquery1.First;
while not fdquery1.Eof do
begin
fcombostrings.Add(fdquery1.FieldByName('ALANADI').AsString);
FDQUERY1.Next;
end;
 FComboStrings.Sorted := True;
 ComboBox1.AutoComplete :=false;
 ComboBox1.Items.Text := FComboStrings.Text;
 ComboBox1.Sorted := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FComboStrings);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
var
 Filter: string;
 i: Integer;
 idx: Integer;
begin

 Filter := ComboBox1.Text;
 ComboBox1.DroppedDown := True;
 ComboBox1.Text := Filter;
 ComboBox1.SelStart := Length(Filter);

 for i := 0 to FComboStrings.Count - 1 do
   if SameText(LeftStr(FComboStrings[i], Length(ComboBox1.Text)), ComboBox1.Text) then
   begin
     if ComboBox1.Items.IndexOf(FComboStrings[i]) < 0 then
       ComboBox1.Items.Add(FComboStrings[i]);
   end
   else
   begin
     idx := ComboBox1.Items.IndexOf(FComboStrings[i]);
     if idx >= 0 then
       ComboBox1.Items.Delete(idx);
   end;
end;

Arkadaşlar iyi günler yukarıda paylaşmış olduğum kodla combobox yazarken filtreleme olayını kullanıyorum sorunsuz çalışıyor ama birkaç sıkıntısı var şöyle ki:
Verileri kodlardan da anlaşıldığı üzere TstringList oluşturarak alıyorum
1-1000'in üzerinde kayıtlarda arama yaparken yavaşlık oluyor StringList açısından bunu nasıl hızlandırabilirim?
2-Veritabanına yeni kayıt olduğunda StringList ve Combobox yeni kayıtı göstermiyor yani güncelleme olmuyor bunu nasıl halledebilirim?
3-StringListte tekrarlanan kayıtları nasıl 1 tane olarak alabiliyoruz? 
4-Arama yaparken değer yoksa fare ok işareti kayboluyor programı sonlandırınca geliyor bu olay neden olabilir aceba?


Kullandığım Veritabanı: Acces
Kullandığım delphi sürümü:10.3 rio




Yardımlarınızı bekliyorum ve şimdiden teşekkür ediyorum.
Cevapla
#2
selamlar
3. nolu sorun için, distinct komutunun kullanımını araştırman uygun olacaktır.
Yazılımcı; kahveyi koda çeviren organizmadır.
Cevapla
#3
Merhaba,
Tekrarlanan kayıtlar için
fdquery1 içindeki sql kodunuzu aşağıdaki gibi düzenlerseniz tekrarlanan kayıtlar gelmeyecektir.
Select DISTINCT AlanAdi From A_Tablosu Where Bolum_No="1"

2. Sorunuz için ise,  StringList ve Combobox içini FormCreate kısmına değilde Arama yapacağınız Alanın OnClick veya OnEnter olayına yazarsanız  kodu arama yapmak için konumlandığınız anda bilgileriniz güncellenecektir.
Güncelleme içinse aşağıdaki şekilde Procedure çağırabilirsiniz.

procedure ComboGuncelle;
Begin
 ComboBox1.Items.Clear;
 if fdquery1.active then fdquery1.Close;
 fdquery1.Open;
 fdquery1.First;
 while not fdquery1.Eof do
 begin
   ComboBox1.Items.Add(fdquery1.FieldByName('ALANADI').AsString);
   FDQUERY1.Next;
 end;
 ComboBox1.AutoComplete :=false;
 ComboBox1.Sorted := True;
End;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Shift+Ctrl+C sorunu [ÇÖZÜLDÜ] woywod 5 381 22-02-2021, Saat: 20:44
Son Yorum: woywod
  delphi indy idhttp ssl kütüphane sorunu mdagli2003 5 403 09-02-2021, Saat: 10:38
Son Yorum: sabanakman
  DeleteFile Sorunu ermanispir@gmail.com 6 697 08-01-2021, Saat: 14:20
Son Yorum: ermanispir@gmail.com
  Filtreleme Yavaşlığı Sorunu bünyamin68 10 807 31-12-2020, Saat: 12:59
Son Yorum: bünyamin68
Wink Exe -> Exe -> DLL -> WEB SQL Sorunu ... Gürcan 4 422 24-12-2020, Saat: 12:31
Son Yorum: Gürcan



Konuyu Okuyanlar: 1 Ziyaretçi