Ü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?
Master-Detail Yanyana sıralama
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Master-Detail Yanyana sıralama
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.
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.
Re: Master-Detail Yanyana sıralama
bu şekilde yaptığınızda her soruy tek tek mi soracaksınız?
Bir kelimenin anlamını öğretsen bile yeter..
Re: Master-Detail Yanyana sıralama
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.conari yazdı:bu şekilde yaptığınızda her soruy tek tek mi soracaksınız?
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.
Re: Master-Detail Yanyana sıralama
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.
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..
Re: Master-Detail Yanyana sıralama
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?
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?
Re: Master-Detail Yanyana sıralama
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