sql de joinle seçim yapmak ve dbgridle like gibi arama
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
sql de joinle seçim yapmak ve dbgridle like gibi arama
Selam
Öncelikle daha önceden bu tarz bir soru sormuştum fakat sornumu tam olarak çözemedim.yapamadığım olay şöyledi...
Şimdi benim 4.ad tablom var Bunlar:
1.Firmalar
2.Listeler
3.Renkler
4.Firma İşlemleri
Firmalar:master tablom
listeler: detay tablom
Renkler: detaya bağlı child tablom
Firma İşlemleri :buda detaya bağlı child tablom
Ben bir tane Firma tanımı yapıyorum .Ve o Firma tanımı ile ilgili işlemleride
şu şekilde yapıyorum.Öncelikle Firma tanımı yapıldı. Ve daha sonra o firmaya ait liste veya o firmaya ait listelerin tanımı yapılıyor...
Olayın daha net anlaşılabilmesi için şöyle söyliyim.Firma kodu:=1 ve bu firma kodunda diyelim 3.ad de liste tanımı yapmışız.ve her bir liste tanımımdada ayrı ayrı firma işlemleri ve renkler seçimi tablosu var..
yani diyelim ki liste1 in firma işlemleri ve renkleri farklı liste2 nin farklı....
firma işlemleri bölümünde kalite ,ürün,alı fiyatı,satış fiyatı gibi alanlar var..
ürün manuel girilemiyorYani şu şekilde
firma kodu:=VSB
kalite:=100
liste1:=1
Ürün:=VSB-100-1
şeklinde oluyor.
şimdi bu rası firma bölümü ile ilgili işlemler.
Birde sipariş bölümüm var.ordada ürün,renk,miktar,fiyat gibi alanlarım var..
birde baştan gerçi unuttum yazmayıda listelerim aktif ve pasif olabiliyor
eğer listem aktif ise ben oluşturduğum ürünleri görebiliyorum.değilse dbgridde göremiyorum...Ve ürünlerde dbgridde gösteriliyor
Adam geliyor siparişler bölümünde de
ürün,renk,sipariş,fiyat gibi... dbgrid alanları var.
Ben Ürün hanesinde entara bastığımda Ürünlerin bulunduğu dbgrid ekrana geliyor.
Ve adam ürün diyelim
VSB-1-100 seçti.yani VSB ürününden ve liste 1 inde bulunan renkleri gösttersin başka bir dbgridde.yapmak istediğim olay bu .Herkese iyi çalışmalar.
Öncelikle daha önceden bu tarz bir soru sormuştum fakat sornumu tam olarak çözemedim.yapamadığım olay şöyledi...
Şimdi benim 4.ad tablom var Bunlar:
1.Firmalar
2.Listeler
3.Renkler
4.Firma İşlemleri
Firmalar:master tablom
listeler: detay tablom
Renkler: detaya bağlı child tablom
Firma İşlemleri :buda detaya bağlı child tablom
Ben bir tane Firma tanımı yapıyorum .Ve o Firma tanımı ile ilgili işlemleride
şu şekilde yapıyorum.Öncelikle Firma tanımı yapıldı. Ve daha sonra o firmaya ait liste veya o firmaya ait listelerin tanımı yapılıyor...
Olayın daha net anlaşılabilmesi için şöyle söyliyim.Firma kodu:=1 ve bu firma kodunda diyelim 3.ad de liste tanımı yapmışız.ve her bir liste tanımımdada ayrı ayrı firma işlemleri ve renkler seçimi tablosu var..
yani diyelim ki liste1 in firma işlemleri ve renkleri farklı liste2 nin farklı....
firma işlemleri bölümünde kalite ,ürün,alı fiyatı,satış fiyatı gibi alanlar var..
ürün manuel girilemiyorYani şu şekilde
firma kodu:=VSB
kalite:=100
liste1:=1
Ürün:=VSB-100-1
şeklinde oluyor.
şimdi bu rası firma bölümü ile ilgili işlemler.
Birde sipariş bölümüm var.ordada ürün,renk,miktar,fiyat gibi alanlarım var..
birde baştan gerçi unuttum yazmayıda listelerim aktif ve pasif olabiliyor
eğer listem aktif ise ben oluşturduğum ürünleri görebiliyorum.değilse dbgridde göremiyorum...Ve ürünlerde dbgridde gösteriliyor
Adam geliyor siparişler bölümünde de
ürün,renk,sipariş,fiyat gibi... dbgrid alanları var.
Ben Ürün hanesinde entara bastığımda Ürünlerin bulunduğu dbgrid ekrana geliyor.
Ve adam ürün diyelim
VSB-1-100 seçti.yani VSB ürününden ve liste 1 inde bulunan renkleri gösttersin başka bir dbgridde.yapmak istediğim olay bu .Herkese iyi çalışmalar.
Sorunu tam anlamdım açıkçası, fikir vermek için şunları diyebilirim. Kullandığın her tabel a ID integer ve PRKey tanımla mutlaka, aralardı bağlantıları bununla yap.
Firma Table:
ID, Firma adı
Renk Table:
ID Renk adı
Kalite Table:
ID Kalite türü
Firmaya ait bilgileride mesela
Firma Ürünleri:
ID Integer, Renk_ID Integer, Kalite_ID integer.....
Renk_ID Renk Table a (foreingkey ile bağlamak mantıklıdır genelde)
Kalite_ID Kalite table ına bağlı
sonuç istediğindede joinlerle istediğin sonucu çekebilirsin. Where kullanarakta filtremeleri yaparsan hem hız hemde hata olasılıklarını azaltmış olursun
fikir vermiştir umarım
Kolay gele
Firma Table:
ID, Firma adı
Renk Table:
ID Renk adı
Kalite Table:
ID Kalite türü
Firmaya ait bilgileride mesela
Firma Ürünleri:
ID Integer, Renk_ID Integer, Kalite_ID integer.....
Renk_ID Renk Table a (foreingkey ile bağlamak mantıklıdır genelde)
Kalite_ID Kalite table ına bağlı
sonuç istediğindede joinlerle istediğin sonucu çekebilirsin. Where kullanarakta filtremeleri yaparsan hem hız hemde hata olasılıklarını azaltmış olursun
fikir vermiştir umarım
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Öncelikle freeman35 abi cevabınız ve fikriniz için çok tşkederim.Gerçekten güzel bir düşünce bende zaten sizin söylediğiniz şekilde yaptım fakat benim sorunum 3 tablodan veri çekmem olayı biraz
zorlaştırıyor.
Şöyleki
ürünleri şu şekilde çekiyorum
ve bu çektiğim ürünleride bir dbgridde göstermekteyim.
ve bu dbgridde
mesela
Ürünlerim şöyle oldu
Örnek:
VSB-1-100
RSN-2-200
VSB-1-300
YMN-3-500
şeklinde ürünlerim şu anda gösteriliyor
buraya kadar tmm
sonra
ben bu ürünleri seçtiğim dbgrid yani bu dbgridden
VSB-1-100 üzerindeyim .ve entera bastığımda VSB-1-100 de ki 1 sayısını çekecek yani burdaki 1 liste nin 1.liste olduğunu gösteryior.Ve liste 1 e ait
renkler gelecek ekrana eğer ortadaki sayı 2 ise liste 2 ye ait renkelr gelcek.Kolay gelsin
zorlaştırıyor.
Şöyleki
ürünleri şu şekilde çekiyorum
Kod: Tümünü seç
select DISTINCT fdurum.durum,fis.urun,fis.alis,fis.seri
from fdurum join fis on fis.did=fdurum.id where fdurum.durum='Aktif'
ve bu dbgridde
mesela
Ürünlerim şöyle oldu
Örnek:
VSB-1-100
RSN-2-200
VSB-1-300
YMN-3-500
şeklinde ürünlerim şu anda gösteriliyor
buraya kadar tmm
sonra
ben bu ürünleri seçtiğim dbgrid yani bu dbgridden
VSB-1-100 üzerindeyim .ve entera bastığımda VSB-1-100 de ki 1 sayısını çekecek yani burdaki 1 liste nin 1.liste olduğunu gösteryior.Ve liste 1 e ait
renkler gelecek ekrana eğer ortadaki sayı 2 ise liste 2 ye ait renkelr gelcek.Kolay gelsin
bu şekilde kullanımı ben tercih etmiyorum Sebei string ifsdeler değişkendir. büyük küçük hasrf fark eder, onun yerine integer kullanıp ayrı bir table da bu iadeleri kullanmak çok daha kullanışlı. Sadece aktif pasif şeklinde bile olsa case kullanıp dışarıya çıkacak değeri elle yazmayı tercih ederim.fdurum.durum='Aktif'
bir diğer noktada FB yada IB kullanıyorsan tüm SQL i kesinlikle büyük harfle yazman. Tam nedenini hatırlamıyorum ama fb ekibi eskiden bunu önermişlerdi.
Son yazdığından anladığımsa şu
sen yazmışsın zaten, ilk verdiğim mantığa bak.VSB-1-100 üzerindeyim .ve entera bastığımda VSB-1-100 de ki 1 sayısını çekecek yani burdaki 1 liste nin 1.liste olduğunu gösteryior.
yapman gereken lookup larla yada artık sana kalmış, rengi temsil eden ID yi yani prkey i kaydetmen. Bu sayede join yada lookup larla kayıtlı olan rengin ID sine ulaşıp kullanıcıya rengin adını göstericeksinRenk Table:
ID Integer ve PRKEY, Renk adı varchar
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
selam
freeman35 abi vermiş olduğunuz açıklayıcı fikirler için ayrıca tşkederim.
Sizin fikirlerinizi dikkat alıcam .Haklısınız ben şimdi buraya kadarda hallettimde
buraya kadar gelebildim ve bu yazdığım sql sorunsuz çalışıyor.Ve burda
liste 1 e ait renkelri çekebiliyorum fakat liste 1 değilde 2 olunca veya 3 olunca nasıl yapmam gerekir.Bu sql ibquerynin sqline yazıldı.Kolay gelsin.İyi çalışmalar.
freeman35 abi vermiş olduğunuz açıklayıcı fikirler için ayrıca tşkederim.
Sizin fikirlerinizi dikkat alıcam .Haklısınız ben şimdi buraya kadarda hallettimde
Kod: Tümünü seç
select DISTINCT fdurum.durum,fis.urun,fis.alis,fis.seri, lrenk.renk
from fdurum,lrenk
inner join fis on (fis.did=fdurum.id)
join lrenk on (lrenk.did=fdurum.id)
where fdurum.durum='Aktif'
and fis.urun Like '%-1-%'
liste 1 e ait renkelri çekebiliyorum fakat liste 1 değilde 2 olunca veya 3 olunca nasıl yapmam gerekir.Bu sql ibquerynin sqline yazıldı.Kolay gelsin.İyi çalışmalar.
%-1-% buraya yğunlaşmangerekiyor. sıkıntın bunu string olarak sakladığından kaynaklanıyor yukarıda yazdıklarım gibi bir mantık kursaydın, like yerine where kullanıcaktın ve where e de parapetre göndermek çok kolay olacaktı. Senin kullandığın kod görede aklıma gelen bu SQL cümlesini her seferinde tekrar oluşturmaktan başka bir şey gelmiyor.Kod: Tümünü seç
select DISTINCT fdurum.durum,fis.urun,fis.alis,fis.seri, lrenk.renk from fdurum,lrenk inner join fis on (fis.did=fdurum.id) join lrenk on (lrenk.did=fdurum.id) where fdurum.durum='Aktif' and fis.urun Like '%-1-%'
Kod: Tümünü seç
const = TMP_SQL = '
select DISTINCT fdurum.durum,fis.urun,fis.alis,fis.seri, lrenk.renk
from fdurum,lrenk
inner join fis on (fis.did=fdurum.id)
join lrenk on (lrenk.did=fdurum.id)
where fdurum.durum='Aktif'
and fis.urun Like '%-%d-%' ';
.........
.........
var ID Integer;
..........
.........
ID := 2;//Yada her ne renk olacaksa
xQuery.SQL.Clear;
xQuery.SQL.Text := Format(TMP_SQL, [ID]);
.............
sanırım %d için format diğer % işaretlerinden su koyvermez, eğer olmazsa string ekleyerek yapılabilinir
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
selamunaleykum
Öncelikle freeamen35 abi size çok çok tşkederim.Gerçekten bilginiz ışığında aydınlattığınız için.
Ve adnan abi sanada ayrıca tşkederim.Benim sorunumu çözmeme vesile oldunuz.Bilmem şu anda duygularımı nasıl anlatsam.Gerçekten Çok sağolun abi.Allah ne muradınız varsa versin.Şu anda gayet rahat bir nefes aldım gerçekten.Şu andaki duyuglarımı nasıl anlatcağımıda bilemiyorum.her şey için sağolun varolun....
Öncelikle freeamen35 abi size çok çok tşkederim.Gerçekten bilginiz ışığında aydınlattığınız için.
Ve adnan abi sanada ayrıca tşkederim.Benim sorunumu çözmeme vesile oldunuz.Bilmem şu anda duygularımı nasıl anlatsam.Gerçekten Çok sağolun abi.Allah ne muradınız varsa versin.Şu anda gayet rahat bir nefes aldım gerçekten.Şu andaki duyuglarımı nasıl anlatcağımıda bilemiyorum.her şey için sağolun varolun....
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Selamlar.
Bu tür sql işlemleri için genelde dinamik sorgu oluşturmak çoğu zaman çözüm sağlayacaktır.Yapmanız gereken parametreleri ya da şartları uygun biçimde sql cümlesine monte etmek.Ben datasetler haricinde (istisnai durumlar hariç..) sorguların genelini dinamik oluşturuyorum ve gayet stabil çalışıyor.
Kolay gele..
Bu tür sql işlemleri için genelde dinamik sorgu oluşturmak çoğu zaman çözüm sağlayacaktır.Yapmanız gereken parametreleri ya da şartları uygun biçimde sql cümlesine monte etmek.Ben datasetler haricinde (istisnai durumlar hariç..) sorguların genelini dinamik oluşturuyorum ve gayet stabil çalışıyor.
Kolay gele..