Şu Ünlü Master-Detail Yok Mu?Nasıl Olacak Biraz İpucu Lütfen

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

Şu Ünlü Master-Detail Yok Mu?Nasıl Olacak Biraz İpucu Lütfen

Mesaj gönderen R.K. »

Öncelikle herkese kolay gelsin,
Arkadaşlar fb veritabanı kullanarak hazırladığım bir projem var. Bir yerde takıldım kaldım anlatırsanız işin mantığını sevinirim. 3 tane tablom var.
TBL_URUN
|---URUN_ID (INTEGER) PK
|---URUN_ADI (VARCHAR)
|---MARKASI (INTEGER) FK

TBL_SATICILAR
|----SATICI_ID (INTEGER) PK
|----SATICI_ADI (VARCHAR)
|----TELEFON (VARCHAR)
|----ADRESI (VARCHAR)

TBL_URNSATDETAIL
|----URNSAT_ID (INTEGER) PK
|----URUN_ID (INTEGER) FK
|----SATICI_ID (INTEGER) FK
Yapmak isteğime gelince TBL_URUN ve TBL_SATICILAR tablosuna girişler yapılıyor. Daha sonra ürün formunda bir dbgrid içerisinden o anki aktif olan ürüne satıcı seçiliyor. Doğal olarak buradaki seçim birden fazla olabilir. Yani bir ürünün temin edildiği 4 satıcı olabilir. Sorun burada işte. Ibdataset bileşenleriyle çalışıyorum ve dediğim gibi seçimleri kullanıcının dbgridden yapmasını istiyorum. DBgridin sağında ise Yeni , Kaydet, İptal olarak 3 tane butonum var. Yani ürünler forumundayken sağdaki Yeni butonuna basınca TBL_URNSATDETAIL tablosu append moduna getiriliyor ve o ürüne satıcılar ekleniyor. Kaydete basıtıktan sonra vt ye baktığımda satıcı eklenmiş görünüyor ama URUN_ID alanını almadığım görünüyor. ActionList bileşenini kullanıyorum ve ekleme, silme kaydetme işlemlerini bu şekilde yapıyorum. Delphi 2007 (codegear) kuallanıyorum. VT tasarımım sizce doğru mu veya nasıl bir yol izlemeliyim.
Bir de sormak istediğim bişey forumda arattım ama tam olarak anlayamadım ya da ben bulamadım. Master-Detail tablo oluşturduğumuzda masterdaki bir alana karşılık (müşteri) detailde bir çok kalem tek seferde girilecekse (ürünler) ve ürünleri dbgridden seçip kaydet deyince ekletmem için nasıl bir yol izlemeliyim. Bunun için dbgrid, dbedit gibi data aware bileşenler mi yoksa normal bileşenler grid, edit gibi bileşenler mi kullanmak daha avantajlı veya kolay. Forumda veya başka bir yerde böyle bir örnek varsa linkini yazabilirseniz sevinirim. Böyle bir işlem içinde benim düşündüğüm vt tasarımı aşağıda. Delphiyle sadece hobi olarak uğraşıyorum yani kolaylıkta önemli benim için.
MUSTERI
---->musteri_id
---->musteri_adi

URUNLER
---->urun_id
---->urun_adi

SATISMASTER
---->satis_id
---->musteri_id
---->satis_tarih

SATISDETAIL
---->?
---->?
Burası nasıl olmalı??
Forumda arattım ama o kadar çok sonuç çıktı ki hepsine tek tek bakmaya çalışıyorum (hala devam) ama tam olarak öğrenmek istediğimi bulamadım. Hiç mi bunun gibi bir programı yapıpta örnek olsun diye siteye ekleyen yok? :( Ben yapınca eklicem ama :) Yardımlarınız için teş.
MELTEM^^
Üye
Mesajlar: 19
Kayıt: 02 Nis 2008 10:34

Re: Şu Ünlü Master-Detail Yok Mu?Nasıl Olacak Biraz İpucu Lütfen

Mesaj gönderen MELTEM^^ »

Tam olarak anlayamadım. ama şu vt ye yardım edim:)

SATISMASTER
---->satis_id
---->musteri_id
---->satis_tarih

SATISDETAIL
---->?
---->?

demişsin. tabi SATISDETAIL tablon neye göre uniq onu söylersen daha düzgün bir vt oluşturabiliriz.ben burda satis_id uniq olarak alıyorum...

Burda detay kısmına koyacağın alanları yazıyorum.
referens--->Bu SATISMASTER tablosundaki satis_id nin değerini almalı.
urunno---->bu kısım masterdaki müşteriye ait ürün olmalı..

böylece SATISDETAIL tablon referans ve urunno alanlarına göre uniq olcak. yani aynı referans ve aynı urunno dan birden fazla olamaz...Mesela bir kayıt uydurursak aşağıya

MASTER KISMI
satis_id musteri_id satis_tarih
1 x müsterisi x tarihi
2 y müsterisi y tarihi


DETAY KISMI

referans urunno
1 a ürünü
1 b urunu
1 c urunu
1 c urunu // burası hatalı mesela aynı kayıt olmaz...
2 a urunu
2 b urunu
2 c urunu

umarım açıklayıcı olmuştur. Kolay gelsin..
Kullanıcı avatarı
dabaddah
Üye
Mesajlar: 167
Kayıt: 13 Mar 2008 04:42
Konum: istanbul

Re: Şu Ünlü Master-Detail Yok Mu?Nasıl Olacak Biraz İpucu Lütfen

Mesaj gönderen dabaddah »

bunun mantığı şudur diyelimki bir müşteriniz var ve siz bunun sizinle yaptığı işlemleri görmek istiyorsunuz ve bunun gibi diğer bütün müşterilerinizin
bu işlemde hiçbir müşterinin yaptığı işlemler bir diğerine karışmaz bu işlemin çok güzel kullanım alanları vardır siz bunun mantığını kavradığınızda bunlarıda siz keşfedersiniz bu kısa bilgiden sonra gelelim bunun nasıl yapılacağına;
bu işlem için öncelikle 2 adet tablonuzun olması lazım birinci tablonuz master olsun ve bu tabloda müşterilenizin bilgileri olsun buradaki istediğiniz alanı master field olarak tanımlayabilirsiniz ancak adres bilgisine görede masterfield yapılmaz tabiki. önerilen master fieldler müşteri noları yada müşteri adlarıdır.
detailsde ise master tablosunda master field olarak tanımladığınız alanda olması lazımki bu iki alanın tipleri ve uzunlukları aynı olması gerekmektedir.
detailde böyle anlattıkdan sonra gelelim bağlantı işlemine master ve detail tablonunuzun bağlantılarının yapıp aktif ettikden sonra detail tablonuzu seçin ve object inspector penceresinden mastersource alanını master tablonuzun datasourcesi yapın aynı tablo seçili iken masterfields alanını mastertablonuzdaki masterolarak düşündüğünüz alanın adını yazın ve aynı yerde indexfilednames bölümüne ise detail tablonuzdaki detail olarak tanımadığınız alanı yazın ve işleminiz tamamlanmıştır. şimdi kullanımına geçelim.
formunuza 2 dbgrid ve birtane dbnavigator koyun 1.dbgridin datasource özelliğini master tablonuzun datasourcesine bağlayın 2 gridinde datasourcesini detail tablonuzun datasourcesine bağlayın dbnavigatorun datasourcesini ise mastere bağlayın ve programınızı çalıştırın dbnavigatordan yeni yi tıklatın master gridin alanlarının doldurun ve kaydedin ve bir kayıt daha yapın kayıtlarınızdan herhangi biri seçili iken detail gridine bir veya birden fazla kayıt girin ve kaydedin master gridinizdeki diğer kaydınızı seçtiğinizde detaildeki kayıtların ona ait olmadığı için gittiğini göreceksiniz tekrar o kayda döndüğünüzde ise kayıtların tekrar geldiğini göreceksiniz işte basit anlatımla master/detail böyle bişeydir...
Allah kolaylıklar vere
sevgi ve başarı dileklerimle.
insanın özü tanımasına engel olan perdeleri;
1.kendini beden sanma
2.vehmî benlik
3.beş duyu blokajları
4.toplumsal şartlanmalar ve şartlanmaların oluşturduğu değer yargıları ve değer yargılarından gelen duygular
kişi bu perdelerden arınmadıkça göresel kozasında yaşar ve bir ipek böceği gibi kaynar kazana atılır.
Cevapla