Gruplandırma hakkında...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
xandercage
Üye
Mesajlar: 2
Kayıt: 05 Nis 2008 07:42

Gruplandırma hakkında...

Mesaj gönderen xandercage »

Merhaba,

Arkadaşlar ben delphi de VB yada VB.NET deki CLASS yapısı gibi bir mantıkla, sanal veritabanı benzeri online gelecek verileri gruplandırmak istiyorum.

mesela büyük bir şirket düşünün bir sürü departmanı var ve bunlar sunucuyuya bağlandıklarında

Departmanlar[DepartmanID].Count diyerek ilgili Departman da bulunan kişileri listelemem gerekiyor, bunun için veritabanı çok uygun ama sürekli socket ilişlisi olacağından ve her socket talebinde bu verileri kontrol edeceğimden ötürü veritabanı kullanamaıyorum.

kişileri, departmanları bu şekilde gruplandırmak için ne yapabilirim?

tek liste altında toplayıp döngü içinde tespit etmek de işin olması açısından kullanılabilir ve zaten şuan ki hali bu şekilde. Fakat bu haldeyken departmana bağlı kişilerin sayısını vermek için her seferinde döndüye girmek gerekiyor bütün bağlantılar kontrol ediliyor ve bu programa fazladan yük getiriyor.

Kod: Tümünü seç

TDepartman   = record 
    Adi         : String;
    Soyadi    : String;
    BaglanmaZamani : TDateTime;
    Bolum     : Integer; 
    Baglimi   : Boolean;
  end;
DepArr : array[0..1000] of TDepartman;
şeklinde 1000 kişiye kadar işlem yapabiliyıorum, yeni bağlantı eklemek bişi değil ama çıkartmak vs. derken karışıyor, ve 2 kişi de olsa hep 1000 lik döngüye giriyor ve performans yerlerde.

DepArr[DepartmanID].Count; diye sayıyı alabilmem yada bu toplaama göre döngüye girip sadece bağlı olanlara işlem yapsam, sürekli olarak 1000 lik bir döngüye girmesem?
bu düşündüğüm mantık mümkünmüdür?
Veritabanı gibi Gruplandırma nasıl yapabilirim...
umarım anlatabilmişimdir.

yardımcı olabilecek arkadaşlara şimdiden çok teşekkür ederim.

selam ve dua ile inşaAllah.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Gruplandırma hakkında...

Mesaj gönderen Battosai »

1000 defa ne döndürdüğüne bağlı...kodları yazarsan daha açıklayıcı olur zira 1000 rakamı bilgisayar işlem kapasitesi için çoook küçük burda döngü içindeki kodlar devreye giriyor...
DepArr[DepartmanID].Count bu ifade ile record içindeki count değerine atama yapabilirsin tabi tanımlıysa...sayısını almak için bir tane fonksiyon yazabilirsin...
xandercage
Üye
Mesajlar: 2
Kayıt: 05 Nis 2008 07:42

Re: Gruplandırma hakkında...

Mesaj gönderen xandercage »

TDepartman = record
Adi : String;
Soyadi : String;
BaglanmaZamani : TDateTime;
Bolum : Integer;
Baglimi : Boolean;
end;
DepArr : array[0..1000] of TDepartman;


bu kodlarda DepArr[DepartmanID].Count; kullanamıyorum zaten.
her seferin de

ekleme yada çıkartma yapmak için

for i := 0 to 999 do begin
if DepArr.Baglimi = False then begin
.... yeni kayıt ekle
end;
end;

şeklinde işlem yapmam lazım.

yada arama bulma kişi tanımlama gibi her seferinde bu döngü olacak.

benim istediğim Class yapısı

yani listview i düşünürsek array a listview eklemiş gibi olacağız

lv.items.item.subitems.string[1] gibi...

ama benim asıl yapmak istediğim, gruplaştırmak
mantık da veritabanına göre şöyle olacak yani
select * from DepartmanOnline Where DepartmanID = 'DepID';
gibi, buradan sadece o ID nin verileri geliyor ve ben döngüye girersem 3 kişi online ise 3 işlem olacak if vs. ile arama yapmayacağıom kim online kim değil...

select * from DepartmanOnline Where DepartmanID = 'DepID';
bu mantığı Class yada Array ile yapabilmek mümkün mü?

VB yada VB.NET de ki Class yapısında yapbiliyoruz bir Collection içine saklıyoruz KEY olduğu için Collection ve class ile yapılıyor. ama Delphi de nasıl çözemedim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Gruplandırma hakkında...

Mesaj gönderen aslangeri »

s.a.
colection larda kendi içinde döngüye girerek arıyor. sen key ini verdiğin zaman oda döngü içinde arayıp sana getiriyor.
ama senin gibi sabit bir binlik yapısı yok tabi. öncelikle dizni binlik olarak değilde dinamik olarak tanımla.
böylelikle 3 departman için döngün 1000 lik değil 3 lük olur.
sonrada kendin bir key dizisi tutarsın. o diziden sıra numarasını bulur asıl dizide işlemi yaparsın. tabi eleman sayısı fazla olmazsa key dizisi tutmanada gerek kalmayabilir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla