Devexpress cxdbcheckbox ile veritabanına kaydedilen verileri sql ile sogulama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mantik20
Üye
Mesajlar: 10
Kayıt: 25 Ağu 2015 09:42

Devexpress cxdbcheckbox ile veritabanına kaydedilen verileri sql ile sogulama

Mesaj gönderen mantik20 »

Merhaba. Delphi 7 ile Devexpress bileşenlerini yeni kullanmaya başlamış birisi olarak, asıl projemde kullanmadan önce, oluşturmuş olduğum test veritabanı ve tablolar üzerinde devexpress bileşenlerinin kullanımı ile ilgili testler yapıyorum. (Delphi 7 + Firebird kullanıyorum)

Tablo yapım ve ihtiyacım olan konu şu şekilde;
Test tablomun bir alanı var ve bu alanda "kişinin ilgi alanlarını" kaydediyorum. Bir kişinin, örneğin "kitap okumak","müzik dinlemek","spor yapmak" gibi birden fazla ilgi alanı olabileceği için ve bunları aynı anda tek bir komponent üzerinde seçmesi gerektiği için, cxdbcheckcombobox bileşeni kullanıma uygun geldi. Bu bileşen ile tablo alanına, seçilen birden fazla veri, "Kitap okumak;Müzik dinlemek;Spor yapmak" şeklinde, veya ";0,4,6" şeklinde kaydedilebiliyor. Kaydedilen bu verileri, cxcheckcombobox içine yükleyip sorgulama yaptığımda sorunum başlıyor.
Şöyle ki;
Önce, bir kişi için ilgialanlari tablo alanına "müzik dinlemek;spor yapmak" maddelerini kaydediyorum.
Daha sonra cxcheckcombobox içindeki kriterlerden "Spor yapmak" seçiyorum ve butona atadığım select * from veri_tbl where ilgialani='spor yapmak" benzeri sorguyu çalıştırdığımda sonuç gelmiyor, çünkü kişinin ilgialanlari alanında ";" ile ayrılmış iki farklı kriter var. Sonuç almak için sorguda like kullandım fakat sorgu için her seçilen kriteri like ile almak istesem performansı olumsuz etkileyecek.

Sormak istediğim asıl soru ise; bir alanda birden fazla seçimin kaydedilmesi gereken durumlarda, master-detay tablo kullanıp, kişi bilgilerini master tabloda, ilgi alanlarını detail tabloda mı tutmalıyım ve sql sorgusunu iki tabloyu birleştirerek mi almalıyım yoksa cxdbcheckbox ile kaydettiğim alandan sizin önereceğiniz bir yöntemle mi sql sorgusu yazmalıyım veya önereceğiniz daha sağlıklı bir yol varmıdır?

Sorumun uzunluğu için özür dilerim, ama sorunumu ifade edebilmek adına uzattım, iyi akşamlar diliyorum
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Devexpress cxdbcheckbox ile veritabanına kaydedilen verileri sql ile sogulama

Mesaj gönderen greenegitim »

Bence master detail kullanmalısınız

örnek detail tablosu
kisi_id int (kisiler tablosundan alacak)
ilgi_alani int (iligi alanları tablosundan alacak)
Mücadele güzelleştirir!
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Devexpress cxdbcheckbox ile veritabanına kaydedilen verileri sql ile sogulama

Mesaj gönderen adelphiforumz »

Selamlar
Master-Detail yapman daha uygun olur düşüncesindeyim
Fakat elindeki kayıtlar çok büyük sayılara ulaşmıyorsa aşağıdaki yöntemide kullanabilrsin.

Fonksiyonun kullanımı

Kod: Tümünü seç

    select * from Fn_SplitString('A;B;C;D;E', ';')
Sonuc sana değerler bir tablo şekilnde dönecektir
Bunuda alıp join işlemine tabi tutarsan ve where içinde elersen istediğin olmuş olur

Kod: Tümünü seç

Create FUNCTION [dbo].[Fn_SplitString](@String nvarchar(4000), @Delimiter char(1))
returns @Results TABLE (Myval varchar(100))
as
   begin
   declare @index int
   declare @slice nvarchar(4000)
   declare @sno int

   select @index = 1
   if @String is null return
   
   set @sno = 0

   while @index != 0
       begin
        select @index = charindex(@Delimiter,@String)
          if @index !=0
           select @slice = left(@String,@index - 1)
          else
             select @slice = @String
            
          set @sno = @sno + 1
          insert into @Results(Myval) values(@slice)
          select @String = right(@String,len(@String) - @index)
          if len(@String) = 0 break
       end    return
end
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Cevapla