Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ListView veri doldurma problemi
#1
Soruların büyük kısmını açmışsamda
Hala Listview veri doldurmayla ilgili sorunlarım devam ediyor.
Aşağıda kodlarını verdiğim işlemde
Table kayıtsayısı 3680 Listview doldurduktan sonra
Saydırdığımda Listview satır sayısı 3680
Fakat 5 işlemden üçünde Listviewde tüm kayıtların tamamının
yüklenmediğini görüyorum. 1000-1500 kayıttan sonrasına
Listviewde göremiyorum .
Listview PullRefreshWait - PulltoRefresh ayarları True


   ListViewDATA.Items.Clear;

   TThread.CreateAnonymousThread(
   procedure()
     Var
       Litem : TListViewItem;
    begin
     TThread.Synchronize(nil,
       procedure()
       begin
          toast('BAŞLADI..');
       end);
     try
       // Yerel Veritabanı Bağlanmaya Çalış
           try
              DATAConnection.Connected := True;
            except
              toast('Yerel veritabanı bağlantısı sağlanamadı !!');
              exit
            end;

       // Özlük Tablosundaki verileri Yükle
          try
              DATAData.Open; //özlük tablosu
              DATAData.First;

              ListViewDATA.BeginUpdate;

              while not DATAData.Eof do
              begin
                 Litem :=ListViewDATA.Items.Add;
                 Litem.Data['Text1'] :=  DATAData.FieldByName('Ad').AsString+
                                         ' '+DATAData.FieldByName('Soyad').AsString;
                 if Length(DATAData.FieldByName('Gsm1').Value) >= 10 then
                    LItem.Data['Image4'] := 7;
                 DATAData.Next;
              end;

              ListViewDATA.EndUpdate;
              KayitSayisi.Text := DATAData.RecordCount.ToString;
              toast (ListViewDATA.Items.Count.ToString);
          except
            toast('Dosya SQL Hatası var  !!');
            exit
          end;


     finally
       TThread.Synchronize(nil,
         procedure()
         begin
            toast('BİTTİ..');
         end);
     end;
   end).Start;



Kodlar ana hatlarıyla bu şekilde ..
Umarım anlaşılır bir şekilde ifade edebilmişimdir.
Yardımlarınız için şimdiden teşekkürler. Tüm Delphican ailesine Saygılar.
Cevapla
#2
1500 kayıt thread ile yükleniyor, hatayı algılayabilmek için geçici olarak thread dışından standart yükleme yapın.

Testinizin sonucu size, veritabanından çekerken hata olur da thread çökerse durumu olmuşsa bunu thread dışından algılamanızı sağlar.

Veri akışı sırasında ağ kopması yaşanıyor olabilir mi onu da inceleme altına alın.

Ayrıca mobil işlemler için araya datasnap katmanı koymak isteyebilirsiniz. Böylece xml/soap fark etmez veri bloğu daha kümülatif alınacağından ağ içinde bekleme en aza incek sağlıklı transfer sağlanmış olacaktır.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
(03-03-2021, Saat: 03:37)kornakamil Adlı Kullanıcıdan Alıntı: Soruların büyük kısmını açmışsamda
Hala Listview veri doldurmayla ilgili sorunlarım devam ediyor.
Aşağıda kodlarını verdiğim işlemde
Table kayıtsayısı 3680 Listview doldurduktan sonra
Saydırdığımda Listview satır sayısı 3680
Fakat 5 işlemden üçünde Listviewde tüm kayıtların tamamının
yüklenmediğini görüyorum. 1000-1500 kayıttan sonrasına
Listviewde göremiyorum .
Listview PullRefreshWait - PulltoRefresh ayarları True

   ListViewDATA.Items.Clear;

   TThread.CreateAnonymousThread(
   procedure()
     Var
       Litem : TListViewItem;
    begin
     TThread.Synchronize(nil,
       procedure()
       begin
          toast('BAŞLADI..');
       end);
     try
       // Yerel Veritabanı Bağlanmaya Çalış
           try
              DATAConnection.Connected := True;
            except
              toast('Yerel veritabanı bağlantısı sağlanamadı !!');
              exit
            end;

       // Özlük Tablosundaki verileri Yükle
          try
              DATAData.Open; //özlük tablosu
              DATAData.First;

              ListViewDATA.BeginUpdate;

              while not DATAData.Eof do
              begin
                 Litem :=ListViewDATA.Items.Add;
                 Litem.Data['Text1'] :=  DATAData.FieldByName('Ad').AsString+
                                         ' '+DATAData.FieldByName('Soyad').AsString;
                 if Length(DATAData.FieldByName('Gsm1').Value) >= 10 then
                    LItem.Data['Image4'] := 7;
                 DATAData.Next;
              end;

              ListViewDATA.EndUpdate;
              KayitSayisi.Text := DATAData.RecordCount.ToString;
              toast (ListViewDATA.Items.Count.ToString);
          except
            toast('Dosya SQL Hatası var  !!');
            exit
          end;


     finally
       TThread.Synchronize(nil,
         procedure()
         begin
            toast('BİTTİ..');
         end);
     end;
   end).Start;


Kodlar ana hatlarıyla bu şekilde ..
Umarım anlaşılır bir şekilde ifade edebilmişimdir.
Yardımlarınız için şimdiden teşekkürler. Tüm Delphican ailesine Saygılar.

Dikkat: ListViewDATA'da değişikliği farklı bir thread içinden yapıyorsunuz! 
UI üzerinde yapacağınız değişiklikleri TThread.Synchronize içinde yapmalısınız.
There's no place like 127.0.0.1
WWW
Cevapla
#4
(03-03-2021, Saat: 11:17)mrmarman Adlı Kullanıcıdan Alıntı: 1500 kayıt thread ile yükleniyor, hatayı algılayabilmek için geçici olarak thread dışından standart yükleme yapın.

Testinizin sonucu size, veritabanından çekerken hata olur da thread çökerse durumu olmuşsa bunu thread dışından algılamanızı sağlar.

Veri akışı sırasında ağ kopması yaşanıyor olabilir mi onu da inceleme altına alın.

Ayrıca mobil işlemler için araya datasnap katmanı koymak isteyebilirsiniz. Böylece xml/soap fark etmez veri bloğu daha kümülatif alınacağından ağ içinde bekleme en aza incek sağlıklı transfer sağlanmış olacaktır.

thread dışı yüklemede kayıtlar sorunsuz yükleniyor. Onun testini yaptım . Saygılar
Cevapla
#5
(03-03-2021, Saat: 12:08)SimaWB Adlı Kullanıcıdan Alıntı: Dikkat: ListViewDATA'da değişikliği farklı bir thread içinden yapıyorsunuz! 
UI üzerinde yapacağınız değişiklikleri TThread.Synchronize içinde yapmalısınız.

TThread.Synchronize içine alınca liste doldurma problemi çözüldü..
TThread içinde harici bileşen kullanmanın sonucu olarak kasılma
meydana geldi. Çözüm daha önceki üsadın belirttiği gibi nesneleri
TTheread içinde yaratmak mümkün olduğunca harici bileşen
kullanmamak. O kısım üzerinde çalışacağım . Teşekkürler
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Android - Geri işlevi problemi Mr.X 0 511 03-02-2025, Saat: 10:59
Son Yorum: Mr.X
  Listview ve TBindSourceDB m_ekici 0 417 25-10-2024, Saat: 15:17
Son Yorum: m_ekici
  FMX Listview m_ekici 8 1.607 30-09-2024, Saat: 20:57
Son Yorum: RAD Coder
  Listview item Boyama codder71 7 1.513 18-08-2024, Saat: 19:01
Son Yorum: codder71
  CSV'ye veri aktarma Altıner 5 1.604 28-03-2024, Saat: 11:49
Son Yorum: Mr.X



Konuyu Okuyanlar: 1 Ziyaretçi