cxGRID te performans sorunu :(

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

cxGRID te performans sorunu :(

Mesaj gönderen spiderman »

iyi calismalar,

cxdbgrid5 de performans bende cok dusuk. sadece 200-300 kayit olan gridde bile kayit ekler veya cikartirken oldukca beklemeler yasamaktayim.

Smartrefresh'i acarak biraz olsun hizlandim ama hala oldukca yavas. ayarlamam gereken buna benzer baska settingler varmi? yada direkt database uzerinde calismaktansa tum islemlerin sonundami dosyaya yazmam gerek.

Yardimlariniz icin simdiden cok tesekkur ederim
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Eğer tabloya toplu kayıt girişi/değiştirme işlemi yapıyorsan şuna benzer kodlar kullanman gerekir:

Kod: Tümünü seç

  cxGrid1DBBandedTableView1.DataController.BeginUpdate;
  try  
    DataSource1.DataSet.DisableControls;
  
    //Toplu işlem kodları...

  finally
    DataSource1.DataSet.EnableControls;
    cxGrid1DBBandedTableView1.DataController.EndUpdate;
  end;
Aksi taktirde her kayıt işleminden sonra Grid update edilecektir.

Eğer problem tek kayıt girişinde de oluyorsa problemi Grid dışında (örneğin DataSet'in Eventlerinde) aramalısın.

İyi çalışmalar.
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Mesaj gönderen spiderman »

ilgine cok tesekkur ederim. ama toplu kayit girisi yapmiyorum. eventlardada birsey yok ama 1 field'in ongettext inde text'ine deger atiyorum. look up kullanmak istemedim o yuzden.

tekrar tesekkurler....
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

OnGetText eventi'nin kodlarında sorun vardır o zaman.
OnGetText event'inin başına Exit yazarak test edebilirsin. Tahminim bu event içinde başka bir tablodan işlem yapıyorsun (LookUp niyetine).

İstersen event'in kodlarını gönder. Belki sorunu çözmende yardımcı oluruz.

İyi çalışmalar.
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Mesaj gönderen spiderman »

Bu event'ta StokID isimli integer fieldi stok dosyasinda adi ve turu ile bulup yazdiriyorum. Button Edit ilede cxGrid icinden sectiriyorum.

Ilginize Cok Tesekkur Ederim :D

Kod: Tümünü seç

procedure TMenuz.SectirGetText_StokID(Sender: TField;var Text: String; DisplayText: Boolean);
Var
  Oku:TADOQuery;
begin
   Sender.Alignment:=taLeftJustify;
  Oku:=TADOQuery.Create(Self);
  Oku.Connection:=osMainADOConn;
  Oku.SQL.Add('SELECT dbo.Stok_Karti.StokAdi, dbo.Stok_Turleri.StokTur, dbo.Stok_Karti.AnaBirim as Paket');
  Oku.SQL.Add('FROM dbo.Stok_Karti LEFT OUTER JOIN');
  Oku.SQL.Add('dbo.Stok_Turleri ON dbo.Stok_Karti.Kod = dbo.Stok_Turleri.StokID');
  Oku.SQL.Add('Where (dbo.Stok_Karti.Kod='+IntToStr(Sender.AsInteger)+') and (isnull(dbo.Stok_Turleri.Kod,0)='+IntToStr(Sender.DataSet.FieldByName('TurID').AsInteger)+')');
  Oku.Open;
  Text:=Oku.FieldByName('StokAdi').AsString+' - '+Oku.FieldByName('StokTur').AsString+' - '+Oku.FieldByName('Paket').AsString;
  Oku.Close;
End;
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

:N(
sonrada cxgridin performansı düşük....
sanırım sorunun kaynağı bulundu...
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Mesaj gönderen spiderman »

tavsiyeniz nedir? sizce stok adini bu dosya icinde bir yerde tutup adini getirmeye ugrasmamak mi? yada baska bir yontem varmi?

:roll:
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Problem burada.

OnGetText eventi ekranda görünen satır sayısı kadar çalışıyor.
Eğer bu query 1 saniyede çalışıyorsa. Ekranda 30 satır demek 30 saniye demek.
Ki bir kayıt girme işleminde en az 3 defa çalışması demek. Bu da 90 saniye demek.

Sonuçta OnGetText eventinde böyle bir kullanım doğru değil gibi.

Çözüm olarak cxGrid'in LookupCombobox' larını kullanabilirsin.

İyi çalışmalar.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
veri tabanınızın yapısını bilmediğim için kesin birşey söyleyemem ama cxgridin datasetinde stok adı hazır olursa iyi olur gibi..
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Mesaj gönderen spiderman »

a.s.

Musterimin stok veya musteri database'i bayagi bi buyuk. 10bin uzerinde cari ve bin uzerinde stok kaydi. lookup o yuzden kullanamiyorum. sadece kayitlarin cok olmasi degil diger clientlardan girilen urun veya carilerin aninda gozukmesi icinde adi gecen dosyalari surekli acip kapatmak istemiyorum.

sizler urun veya cari hareket dosyalarinda adlarini sakliyormusunuz? izlediginiz yontem hakkinda bilgi verirseniz cok sevinirim.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

spiderman yazdı:Bu event'ta StokID isimli integer fieldi stok dosyasinda adi ve turu ile bulup yazdiriyorum. Button Edit ilede cxGrid icinden sectiriyorum.

Ilginize Cok Tesekkur Ederim :D

Kod: Tümünü seç

procedure TMenuz.SectirGetText_StokID(Sender: TField;var Text: String; DisplayText: Boolean);
Var
  Oku:TADOQuery;
begin
   Sender.Alignment:=taLeftJustify;
  Oku:=TADOQuery.Create(Self);
  Oku.Connection:=osMainADOConn;
  Oku.SQL.Add('SELECT dbo.Stok_Karti.StokAdi, dbo.Stok_Turleri.StokTur, dbo.Stok_Karti.AnaBirim as Paket');
  Oku.SQL.Add('FROM dbo.Stok_Karti LEFT OUTER JOIN');
  Oku.SQL.Add('dbo.Stok_Turleri ON dbo.Stok_Karti.Kod = dbo.Stok_Turleri.StokID');
  Oku.SQL.Add('Where (dbo.Stok_Karti.Kod='+IntToStr(Sender.AsInteger)+') and (isnull(dbo.Stok_Turleri.Kod,0)='+IntToStr(Sender.DataSet.FieldByName('TurID').AsInteger)+')');
  Oku.Open;
  Text:=Oku.FieldByName('StokAdi').AsString+' - '+Oku.FieldByName('StokTur').AsString+' - '+Oku.FieldByName('Paket').AsString;
  Oku.Close;
End
Hocam soruna cevap mesaji degil bu ama ben tam senin suan yaptigin olayda takildim. Yanlis anlamadiysam vertabanina StokID'sini kaydettiriyorsun ancak Grid üzerinde ID si degil Kodu ve Türü gözüküyor, Kodunu kullanici degistirmeye kalktiginda o koda ait bir stok kodu olup olmadigini kontrol ettiriyorsun eger varsa StokID isimli alandaki deger yeni koda ait ID yi aliyor ve akabinde Türü de degisiyor. İşte ben bu anlattiklarimi yapamadim da o bakimdan soruyorum :) Yardimci olabilir misin bu noktada takildim hatta foruma da sordum "CxGrid & DbGrid ayni anda kullanabilme" diye bir başlıkta. Teşekkürler
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Bu arada ekstra bisey daha sormak istiyorm bu cxgridn BeginUpdate ve EndUpdate islemi BatchAll olayi gibi bisey mi? Yani vt ye EndUpdate denildiginde yansitiliyor olaylar oyle mi?
Cevapla