küçük 3500- 4000 kayıtlık bir veritabanım var . Veritabanı bilgilerini ListViewe görsel olarak bağladım ve senkronize ettim . Veri sayısı küçük olduğu için senkronizasyon işlerimi kolaylaştırıyor. Problemim şu . Veritabanını Listviewe yüklerken TTask kullanıyorum . TTask içinde veritabanı bağlantısı kurulup Table açıldığında TTask sonlanıyor. Yükleme esnasında oluşturduğum Frame doğal olarak işlevini tamamlıyor. Verile Listviewe yüklenirken yaklaşık 30 saniye kadar verilerin gelmesini bekliyorum . Görsel olarak hoş olmuyor. Listview tüm veritabanıma yükleninceye TTask işlemimin devamını nasıl sağlıyabilirim . Tam olarak problemimi anlatabilmişimdir umarım . Yardımlarınız için şimdiden teşekkür ederim ..
Sanırım sorunun çözümünü FGX bileşeni sağlayacak. Abdullah hocam Sydney içinde tekrar paketleseniz bileşeni. İnternette ve sitede önerilen çözümleri deniyorum fakat istediğim akıcılıkta bir sonuç elde edemedim ..
Veritabanı bağlantısını görsel olarak kurup, ne kadar kontrolünüzde olduğunu bilemediğim ve ayrıca ttask içinde bu veri tabanı bağlantısını nasıl zapt ettiğinizi ve listview'e aktardığınızı bilemiyorum.
Görsel bağlantı yerine kod ile veritabanına bağlanırsanız, (burada bunun üzerinde yorum yapılabilir) yazacağınız procedure ve callback yapıları size tthread aracılığıyla bu paralelleştirme imkanını kolaylaşır.
ListView verileri kodla doldurdum.. Veritabanı ilişkisinide Locate ile sağladım item seçildikçe . Yüklenme hızı 4-5 kat arttı . Ama Listview görüntülenmeden biraz kasılma hala var . . Kod yazarken kolaya kaçmamak lazım bunun önemini daha iyi gördüm . Hız olarak çok farketti . Yardımlarınız için teşekkür ederim
Şöyle bir örnek proje hazırladım sizin için.... Anlatılanlar ete kemiğe bürünsün diye örneklemek istedim. Hem başlığı okuyanlar da fiziki bir örnek elde etmiş olurlar.
Örnek Proje RAR ile paketli bu mesaj ekindedir.
RESOURCE olarak test içerik 50 kayıtlık bir veri içeriyor. (bu test listesini 10 kere döndürürseniz 500 kayıtmış gibi test edebilirsiniz)
Hem Android hem de Windows ortamında deneyebilirsiniz.
İşlem bilgilendirmeleri Notification olarak karşınıza geliyor.
Dikkat edileceği üzere Veritabanı için gerekli Query nesnesi Thread içerisinde oluşturarak işi bitince de free ediliyor. Yani forma bırakılmış bir nesne değil.
Thread işlemlerinde bağımsızlaştırılmış işlemler önemlidir. Bilgilendirme için kullanılan aNotif procedure de (bu örnekte gerek yoktu aslında dinamik procedure'ler değil de asıl projenizdeki diğer nesneler ile iletişim için Syncronize kullanımı önemli) Syncronize ile çağrıldı.
Çok önemli not :
Kullanılan örnekte SQLite veritabanı kullanımıştır.
Yapısal olarak sorgulama için ( SELECT ) birden fazla paralel erişim için uygun olsa da kayıt girişi veya değişikliği için (INSERT, UPDATE) tek kullanıcılı işlemler için uygundur.
Üstad örnek harika kafamdaki tüm soruların cevabı örneğin içinde .
Ben kodlamaya Clipper ile başlamıştım . Kod yazmaktan yüksünmem
ama sanırım Visual proğramlar bizi biraz tembelliğe alıştırdı.
Emeğinize sağlık. Saygılar
@Tuğrul HELVACI çok haklı olarak, çok ama çok önemli hatama dikkatimi çekti.
Acele ile yazınca oluyor böyle hatalar ama bu fahiş hata sayılanlardan, yani özürü yok
MemoryLeak bir projede en kaçınılması gereken hatalardan biridir. Buradaki örnekte OnCreate olayına konacak kısmı Button altına koyunca her butona basışta var olan nesneye bir yenisi eklenerek şişiyor olduğunu fark etmemişim.
Ayrıca Thread içerisinde aynı connection'u kullanmışım, ona da bir ek connection create edilmesi sağlandı.