Aramada hız problemi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mgulbeyaz
Üye
Mesajlar: 2
Kayıt: 15 Eki 2006 01:12
Konum: ankara

Aramada hız problemi

Mesaj gönderen mgulbeyaz »

Merhaba. 1, yıldır delphi ile uğraşıyorum (kendimi geliştirmek için) sitenizden çok şey öğrendim, emeği geçen herkezden Allah razı olsun. Bu ilk sorum olacak.
Personel programı yapmaya çalışıyorum. Bitmek üzere iken bir sorunla karşılaştım. Sorunum Arama yaparken çok yavaş arama yapması.

Tasarımım şu şekilde. Delphi 7 kullanıyorum.
Veri Tabanım Advantage, ilişkileri de veritabanı üzerinden kurdum.Querylerin master source ve master field lerini de ayarladım. İndexleri de ayarlı (P_sicil,Ad,Syd).Personel Tabloma Bağlı 8 tablom var. Ayrıca Bürosunu, Rütbesi,Öğrenim durumu vs. gibi bilgilerini başka tablolarda tutup Personel Tabloma bunların kodlarını yazdırıyorum.
Personel Kayıt ve Bilgileri Ekranında personel aramasını jvdbsearchedit ler ile yapıyorum. Sorunumda burada başlıyor. Arama işlemim çok yavaş oluyor. Ayrıca ilk kayıttan son kayıda 3 sn de gidiyor. Tablomdaki kayıt sayısı 1150.Bu kayıtları excelden aktardım.

Sorunu Çözebilmek için yaptıklarım.
1-Yeni bir Proje başlatıp orda jvdbsearchedit le tekrar denedim hızlı çalıştı.(Sorun Jedide Değil ayrıca sorgulama ekranımda da jedi ile arıyorum hızı iyi)
2-Querypersonel Hariç Tüm Queryleri kapattım denedim yine değişmedi.
3-Bitane edit koydum onchangesinde arama yaptırayım dedim Cannot perform this operation on a closed dataset' hatasını verdi.(Hatayı oflinedan aradım ama yazılanları okudum çözüme ulaşamadım)Bu hatayı vermeseydi de onchange ile arasaydım hızlanırmıydı?

Nerde hata yaptığımı bulamadım Tavsiyeleriniz nelerdir? Yardımlarınız için şimdiden teşekkür ederim.
:(
Buğdayı olmaksızın değirmene gidenin ancak saçı sakalı ağarır...
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

merhabalar.advantage ile çalışma yaparken advantage veritabanının kendi nesnelerini kullan.ayrıca table nesnesi kullan.query kullanma.advantage de paradox gibi erişimde table nesnelerini kullanırsan daha fazla verim sağlarsın.
kolay gelsin.
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Mesaj gönderen pasa_yasar »

daha önce kllinik yazılımı geliştirdim advantage ile yaklaşık 10,000 hastada aramayı çok iyi olmaz isede normal bir hızda yapıyordu. 1150 kayıt için query veya table kullanman çokda birşey değiştirmez bence. tabloların indexlerini bir kontrol et istersen. ve advantagenin veri tabanı yöneticisi ve delphi componentlerini kullan her ne kadar mimari bir yapıya sahip denilsede paradox gelişmişi o kadar . istersen sana forum üzerinden bu nesneleri gönderebilirim.(not bunlar ücretsizdir.adminler kızmasın) en son advantage sysbase satılmıştı şu anda durumu nedir bilmiyorum.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Mesaj gönderen Battosai »

Arkadaşlar advantage localde program yapılacaksa en mantıklı çözümdür.Ayrıca oldukça hızlıdır.Ben 30.000 kayıt arsında arama yaptım tabiri caiz ise cart diye buluyor...Elbette kayıt sayısı arttıkça yavaşlama olur ama 1000 kayıt için hiç bir veritabanı sorun çıkarmaz...Advantage da table kullan demiş arkadaş niye öyle demiş bilmiyorum ama bunların yerleri farklı...Advantage da bir kaç sıkıntı var özellikle query lerde kayıt mevzusunda "Cannot perform this operation on a closed dataset" bu hatayı verir niye mi? Query ile yaptığın her hangi bir sorgu sonucunda değer dönmez ise Advantage query si akabinde gelen edit, insert gibi komutlarda bu hatayı verir yani kendini readonly yapıyor diyeyim...Bu sorunu ben nasıl çözüyorum yazayım lazım olur belki sana

Kod: Tümünü seç

if AdsQuery.canmodify=false then // düzenlenebilir modda değil ise
 begin
  Quey.sql.clear;
  query.sql.add('select*from tablo');
  query.open;
 end;
 AdsQuey.insert;// veya edit;
Bu yüzden kayıt işlerinde table liste ve sorgularda Query kullanımı tavsiye edilir advantage için...

Birde yavaşlığa neden olan bir sorun var senin sorununda onda olabilir muhtemelen "Autoinc alanlar" advantage ta örneğin 30000 kayıtlık bir vt ni z olsun eğer autoinc vir alan tanımlıysa işte o zaman yavaşlamadan söz edilebilir.
Ayrıca tablo içeriğini silsen bile yani tabloyu boşalttsanda o tablonun boyutu değişmiyor 10 mb sa öyle kalıyor...Bu bir sorun işte bir keresinde döngü ile 100.000 kayıt girmiştim tablo boyutu tam 76 mb oldu...

Advantage veri erişim ve kayıt işlerinde kesinlikle hızlıdır hatta testlerime göre mssql den hızlı localde...Advantega bu dezavantajlarını giderse tam süper olacak...umarım açıklayıcı olmuştur...
mgulbeyaz
Üye
Mesajlar: 2
Kayıt: 15 Eki 2006 01:12
Konum: ankara

Mesaj gönderen mgulbeyaz »

Cevaplarınız için teşekkür ederim.
Arama işlemini cxgrid üzerinden yaparak hallettim, hızı iyi.
Ama problem sonuçta devam ediyor. Yapıyı tekrar gözden geçireceğim. Sorunu çözebilirsem yazarım. Herkeze kolay gelsin.
Buğdayı olmaksızın değirmene gidenin ancak saçı sakalı ağarır...
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

mgulbeyaz yazdı:Cevaplarınız için teşekkür ederim.
Arama işlemini cxgrid üzerinden yaparak hallettim, hızı iyi.
Ama problem sonuçta devam ediyor. Yapıyı tekrar gözden geçireceğim. Sorunu çözebilirsem yazarım. Herkeze kolay gelsin.
kayıt sayısı artınca göreceğiz cxgrid ne kadar iyi. tamam çözüm çözümdür ama cxgridden bir sürü şikayet oldu burada. o bakımdan önce mimariyi ve dosya yapısını ele almakta fayda var
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Cevapla