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
Devexpress cxdbcheckbox ile veritabanına kaydedilen verileri sql ile sogulama
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
- greenegitim
- Üye
- Mesajlar: 713
- Kayıt: 28 Nis 2011 10:33
- Konum: İstanbul
Re: Devexpress cxdbcheckbox ile veritabanına kaydedilen verileri sql ile sogulama
Bence master detail kullanmalısınız
örnek detail tablosu
kisi_id int (kisiler tablosundan alacak)
ilgi_alani int (iligi alanları tablosundan alacak)
örnek detail tablosu
kisi_id int (kisiler tablosundan alacak)
ilgi_alani int (iligi alanları tablosundan alacak)
Mücadele güzelleştirir!
- adelphiforumz
- Üye
- Mesajlar: 602
- Kayıt: 01 Nis 2008 05:38
- Konum: İstanbul
Re: Devexpress cxdbcheckbox ile veritabanına kaydedilen verileri sql ile sogulama
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ı
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
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', ';')
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
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