Master-Detail Yanyana sıralama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
allpower
Üye
Mesajlar: 5
Kayıt: 20 Ağu 2010 03:49

Master-Detail Yanyana sıralama

Mesaj gönderen allpower »

Üzerinde çalıştığım bir proje (anket benzeri) için Master -Detail yapıda 2 tablom var.
1. Tabloda Soru 2. Tabloda ise cevaplar. Soruya göre cevap adetleri değişiklik gösterebiliyor.
Benim yapmak istediğim ise şu herhangi bir grid kullanarak (özellikli bir grid olması tercih nedenidir checkbox vs ekelenecegi icin) bu verileri yanyana listelemek istiyorum.
Örn: Internet Bağlantısı Varmı ? - Evet - Hayır - Bilinmiyor - n(Çoğalabilir)
Bu şekilde 1. sütunda soru, 2. sütundan itibarende Her cevabın yine bir sütunda yer aldığı bir yapı istiyorum.
Bu istediğimi nasıl gerçekleştirebilirim?
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Master-Detail Yanyana sıralama

Mesaj gönderen mrmarman »

SQL ile sorguları yaparken JOIN ile iki tabloyu birleştirebilirsiniz.

SELECT S.Soru, C.Cevap FROM SORULAR S
LEFT JOIN CEVAPLAR C ON ( C.SoruID = S.KaySiraNo )

gibi bir yapıyı sizin kurmanız lazım.
Resim
Resim ....Resim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Master-Detail Yanyana sıralama

Mesaj gönderen conari »

bu şekilde yaptığınızda her soruy tek tek mi soracaksınız?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
allpower
Üye
Mesajlar: 5
Kayıt: 20 Ağu 2010 03:49

Re: Master-Detail Yanyana sıralama

Mesaj gönderen allpower »

conari yazdı:bu şekilde yaptığınızda her soruy tek tek mi soracaksınız?
Hayır Tek tek degil aslında 3 tablo var. Master - Detail - SubDetail Şeklinde. Benim örneklediğim kısmı Detail - Subdetail olan kısmı, benim takıldığım kısım yani.
Konular - Sorular - Cevaplar şeklinde düşünürsek daha kolay olur sanırım. Olayı daha basite indirgemek için Master Detail olarak anlatmaya çalıştım. Sonuç olarak Seçili bir konunun altındaki tüm soruları ve cevapları bu şekilde listeliyorum. Buradan sorular ve cevaplarla ilgili değişiklikleri yapıp kaydediyorum. Bir nevi anket yönetimi için kontrol programı diyebiliriz.

Hali hazırda döngülerle benim kurduğum bir yapı var ama performans olarak çok kötü durumda.

Join ile İki tabloyu birleştirdiğimde ise çıkan sonuç;
Soru - Cevap
İnternet Bağlantısı Varmı ? - Evet
İnternet Bağlantısı Varmı ? - Hayır
İnternet Bağlantısı Varmı ? - Bilinmiyor
..... - .....
Bu şekildede datayı gösterirken gereksiz karmaşıklık yaratıyor.(İlk hali bu şekildeydi müşterinin isteği doğrultusunda değişti) Bu join ile gelen sonuc iş görür tabiki ama aynı soruyu her cevap için alt alta yazdırmaktansa, Soru - Cevap1 - Cevap2 - Cevap(n) şeklinde en sağlıklı biçimde nasıl yapacağımı bulamadım.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Master-Detail Yanyana sıralama

Mesaj gönderen conari »

DBgrid için Ekstra bir SP lazım Query ile olacak gibi değil istediğiniz.
3. parti bileşenlerde (QuantumGrid, Devexpress v.s.) olabilir.

Listview kullanıp oradan seçenek sayısına göre bir döngü ile Fieldlar eklenebilir.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
allpower
Üye
Mesajlar: 5
Kayıt: 20 Ağu 2010 03:49

Re: Master-Detail Yanyana sıralama

Mesaj gönderen allpower »

Aklıma gelen farklı bir yöntemde (bu arada Mysql kullanıyorum).
Bir stored procedure ile bu datayı tek seferde string olarak dışarı alsam, Örneğin : S:Bağlantı varmı?,Evet,Hayır,Bilinmiyor,S:Diger Soru?,Cevap1,Cevap2,Cevap3,CevapN;
Sonrasındada Delphi ile bunu parse edip grid icine yazdırsam.
Nasıl olur ne dersiniz?
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: Master-Detail Yanyana sıralama

Mesaj gönderen Hakan Can »

Eğer tablo yapısı şuna benzer birşeyse şöyle bir çözüm olabilir:

Kod: Tümünü seç

SORULAR
------------------
SORU_NO INTEGER
SORU VARCHAR(1000)

CEVAPLAR
---------------
SORU_NO INTEGER
CEVAP_SIRA_NO INTEGER
CEVAP VARCHAR(100)

SELECT
  T1.SORU_NO,
  T1.SORU,
  T2.CEVAP AS CEVAP_1,
  T3.CEVAP AS CEVAP_2,
  T4.CEVAP AS CEVAP_3,
  T5.CEVAP AS CEVAP_4,
  T6.CEVAP AS CEVAP_5
FROM SORULAR T1
  LEFT JOIN CEVAPLAR T2 ON T2.SORU_NO = T1.SORU_NO AND T2.CEVAP_SIRA_NO = 1
  LEFT JOIN CEVAPLAR T3 ON T3.SORU_NO = T1.SORU_NO AND T3.CEVAP_SIRA_NO = 2
  LEFT JOIN CEVAPLAR T4 ON T4.SORU_NO = T1.SORU_NO AND T4.CEVAP_SIRA_NO = 3
  LEFT JOIN CEVAPLAR T5 ON T5.SORU_NO = T1.SORU_NO AND T5.CEVAP_SIRA_NO = 4
  LEFT JOIN CEVAPLAR T6 ON T6.SORU_NO = T1.SORU_NO AND T6.CEVAP_SIRA_NO = 5
Cevapla