Formun geç açılması.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Ertuğrul2025
Üye
Mesajlar: 30
Kayıt: 08 Oca 2025 10:35

Formun geç açılması.

Mesaj gönderen Ertuğrul2025 »

Hayırlı günler formumda 9 adet combobox var ve hepsinin içinde tablo sütunundaki kayıtları göstermek istiyorum.
Aşağıdaki kod ile comboboxların içindeki kayıtları gösteriyor ama form çok geç açılıyor.
Formun hemen açılması için ne yapmam gerekir açaba bu konuda bana yardımcı olurmusunuz.

procedure TForm1.FormShow(Sender: TObject);
begin
ADOTable1.Open;
ADOTable1.First;
ComboBox_HTF_KOD.Clear;
repeat
ComboBox_HTF_KOD.Items.Add(ADOTable1KOD.AsString);
ADOTable1.Next;
until ADOTable1.Eof;
ADOTable1.Close;
//
ADOTable2.Open;
ADOTable2.First;
ComboBox_E17.Clear;
repeat
ComboBox_E17.Items.Add(ADOTable2A17.AsString);
ADOTable2.Next;
until ADOTable2.Eof;
ADOTable2.Close;
//
ADOTable3.Open;
ADOTable3.First;
ComboBox_E3.Clear;
repeat
ComboBox_E3.Items.Add(ADOTable3STOK.AsString);
ADOTable3.Next;
until ADOTable3.Eof;
ADOTable3.Close;
//
ADOTable4.Open;
ADOTable4.First;
ComboBox_E4.Clear;
repeat
ComboBox_E4.Items.Add(ADOTable4A4.AsString);
ADOTable4.Next;
until ADOTable4.Eof;
ADOTable4.Close;
//
ADOTable5.Open;
ADOTable5.First;
ComboBox_E7.Clear;
repeat
ComboBox_E7.Items.Add(ADOTable5A7.AsString);
ADOTable5.Next;
until ADOTable5.Eof;
ADOTable5.Close;
//
ADOTable6.Open;
ADOTable6.First;
ComboBox_E9.Clear;
repeat
ComboBox_E9.Items.Add(ADOTable6A9.AsString);
ADOTable9.Next;
until ADOTable6.Eof;
ADOTable6.Close;
//
ADOTable7.Open;
ADOTable7.First;
ComboBox_E10.Clear;
repeat
ComboBox_E10.Items.Add(ADOTable7A10.AsString);
ADOTable7.Next;
until ADOTable7.Eof;
ADOTable7.Close;
//
ADOTable8.Open;
ADOTable8.First;
ComboBox_E15.Clear;
repeat
ComboBox_E15.Items.Add(ADOTable8A15.AsString);
ADOTable8.Next;
until ADOTable8.Eof;
ADOTable8.Close;
//
ADOTable9.Open;
ADOTable9.First;
ComboBox_E16.Clear;
repeat
ComboBox_E16.Items.Add(ADOTable9A16.AsString);
ADOTable9.Next;
until ADOTable9.Eof;
ADOTable9.Close;
//
end;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Formun geç açılması.

Mesaj gönderen freeman35 »

dbcombobox kullan, query lere sort ekle.
niye repeat until, while değil?
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
ertank
Kıdemli Üye
Mesajlar: 1711
Kayıt: 12 Eyl 2015 12:45

Re: Formun geç açılması.

Mesaj gönderen ertank »

Ertuğrul2025 yazdı: 11 Şub 2025 09:23 Hayırlı günler formumda 9 adet combobox var ve hepsinin içinde tablo sütunundaki kayıtları göstermek istiyorum.
Aşağıdaki kod ile comboboxların içindeki kayıtları gösteriyor ama form çok geç açılıyor.
Formun hemen açılması için ne yapmam gerekir açaba bu konuda bana yardımcı olurmusunuz.
Merhaba,

İşlemi yavaşlatan tabloların kapatılıp açılması olduğunu düşünüyorum.

Mümkün ise bir data module içine 9 tane sorgu ekleyip uygulamanın ilk açılışında bu sorguları çalıştırabilir ve açık tutabilirsiniz.
TForm.OnShow() kısmında ise sadece first, next şeklinde döngü içinde kayıtları yükleyebilirsiniz.

Eğer veriler çok değişken ve her form gösteriminde yeniden veritabanından okunması gerekiyor ise yapabileceğiniz çok fazla birşey olmayabilir. Bu durumda en fazla 9 farklı thread çalıştırarak verileri doldurmayı deneyebilirsiniz ancak çok bir zaman kazandırır mı emin değilim.

Zaten tavsiye edildiği üzere repeat..until kullanımı veritabanından kayıt okumak için uygun değildir. Eğer veritabanı boş ise, repeat bloğu en azından bir defa çalışacağı için uygulama hatası oluşması ihtimali var. Bunun yerine while döngüsü kullanmanız daha güvenli olacaktır.

Kod: Tümünü seç

  ADOTable1.Open;
  ADOTable1.First;
  ComboBox_HTF_KOD.Clear;
  while not ADOTable1.Eof do
  begin
    ComboBox_HTF_KOD.Items.Add(ADOTable1KOD.AsString);
    ADOTable1.Next;
  end;
Ertuğrul2025
Üye
Mesajlar: 30
Kayıt: 08 Oca 2025 10:35

Re: Formun geç açılması.

Mesaj gönderen Ertuğrul2025 »

freeman35 yazdı: 12 Şub 2025 09:47 dbcombobox kullan, query lere sort ekle.
niye repeat until, while değil?
Bu işte biraz acemiyim hocam
query lere sort ekle
Nasıl yapabilirim acaba.
Ertuğrul2025
Üye
Mesajlar: 30
Kayıt: 08 Oca 2025 10:35

Re: Formun geç açılması.

Mesaj gönderen Ertuğrul2025 »

ertank yazdı: 12 Şub 2025 11:06
Ertuğrul2025 yazdı: 11 Şub 2025 09:23 Hayırlı günler formumda 9 adet combobox var ve hepsinin içinde tablo sütunundaki kayıtları göstermek istiyorum.
Aşağıdaki kod ile comboboxların içindeki kayıtları gösteriyor ama form çok geç açılıyor.
Formun hemen açılması için ne yapmam gerekir açaba bu konuda bana yardımcı olurmusunuz.
Merhaba,

İşlemi yavaşlatan tabloların kapatılıp açılması olduğunu düşünüyorum.

Mümkün ise bir data module içine 9 tane sorgu ekleyip uygulamanın ilk açılışında bu sorguları çalıştırabilir ve açık tutabilirsiniz.
TForm.OnShow() kısmında ise sadece first, next şeklinde döngü içinde kayıtları yükleyebilirsiniz.

Eğer veriler çok değişken ve her form gösteriminde yeniden veritabanından okunması gerekiyor ise yapabileceğiniz çok fazla birşey olmayabilir. Bu durumda en fazla 9 farklı thread çalıştırarak verileri doldurmayı deneyebilirsiniz ancak çok bir zaman kazandırır mı emin değilim.

Zaten tavsiye edildiği üzere repeat..until kullanımı veritabanından kayıt okumak için uygun değildir. Eğer veritabanı boş ise, repeat bloğu en azından bir defa çalışacağı için uygulama hatası oluşması ihtimali var. Bunun yerine while döngüsü kullanmanız daha güvenli olacaktır.

Kod: Tümünü seç

  ADOTable1.Open;
  ADOTable1.First;
  ComboBox_HTF_KOD.Clear;
  while not ADOTable1.Eof do
  begin
    ComboBox_HTF_KOD.Items.Add(ADOTable1KOD.AsString);
    ADOTable1.Next;
  end;
Teşekkür ederim deniyorum.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: Formun geç açılması.

Mesaj gönderen freeman35 »

Ertuğrul2025 yazdı: 12 Şub 2025 01:27 Bu işte biraz acemiyim hocam
query lere sort ekle
Nasıl yapabilirim acaba.
sql text ine "order by fieldname(s)"
index olan alanlarda daha verimli çalışır.
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Ertuğrul2025
Üye
Mesajlar: 30
Kayıt: 08 Oca 2025 10:35

Re: Formun geç açılması.

Mesaj gönderen Ertuğrul2025 »

freeman35 yazdı: 14 Şub 2025 09:43
Ertuğrul2025 yazdı: 12 Şub 2025 01:27 Bu işte biraz acemiyim hocam
query lere sort ekle
Nasıl yapabilirim acaba.
sql text ine "order by fieldname(s)"
index olan alanlarda daha verimli çalışır.
Teşekkür ederim hocam emeğine sağlık.
Cevapla