sql kodunda sorun

Diğer veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
PcText
Üye
Mesajlar: 36
Kayıt: 19 Ağu 2004 04:04
Konum: İstanbul / Alibeyköy
İletişim:

sql kodunda sorun

Mesaj gönderen PcText »

S.a askerliğimi yaptığım Afyon orduevinden tüm delphiturkiye ailesine selamlar,
arkadaşlar...aşağıda yazan sql kodlarıyla yaptığım sorguda oda durumu dolu olanları listelemeye çalışıyorum
fakat sorguda aynı kayıt gridde iki kere listeleniyo acaba sql kodumdamı hata var
ha bide bunu sadece ana tablomun alt tablosuna birden fazla kayıt girince yapıyo
misal: ana tablomdaki 101 numaralı odaya alt tablomda ahmet diye bir müşteri kaydettiğimde tablomundurum...

ana tablo
odano:101

alt tablo
musteri isim: ahmet
oluyo burda problem yok
ama alt tabloya ikinci bir kayıt yaptığımda...yani

ana tablo
oda no :101
alt tablo
musteri isim: ahmet
musteri isim : mehmet
şeklinde olması gerekirken

ana tablo
odano 101
odano 101 (bura alanı fazladan gösteriyo)

alt tablo
musteri isim :ahmet
musteri isim : mehmet

şeklinde oluyo

bunun nedeni ne olabilir acaba yardımlarınızı bekliyorum

sorgu kodum aşağıda


QODAINFO.SQL.CLOSE;
QODAINFO.SQL.Clear;
QODAINFO.SQL.Add('select *from ODAINFO,MUSTERI,KONAKLAMA');
QODAINFO.SQL.Add('where odadurumu='+quotedstr('ODA DOLU'));
QODAINFO.SQL.Add('and '+quotedstr(datetostr(tarihsorgu.Date))+' between giris and cikis ');
QODAINFO.SQL.Add('and INDMUS=ODAID');
QODAINFO.SQL.Add('AND MUSNO2=MUSNO');
if (odasec.Text<>'Tüm Odalar') then
begin
QODAINFO.SQL.Add('and odano='+quotedstr(odasec.Text));
end;

@mrmarman yazdı:TAŞIMA BİLGİSİ : Programlama formundan DİĞER VERİTABANLARI formuna taşınmıştır
QODAINFO.SQL.Add('ORDER BY ODANO ');

QODAINFO.OPEN;
Dört bir yan kararınca sana yöneldik.Ey ışıklar kaynağı aç kapını biz geldik.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

karışık bir anlatım olmuş.
gridde raporlamak istediğin müşteri listesi midir?
sorgunun sana vereceği sonucun türkçesi nedir?
yani "hangi müşteri hangi odada kalıyor?" sorusunun cevabını mı verecek,
"odalarda kalanlar kimlerdir?" sorusunun cevabını mı verecek?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Mrb; sanırım en önemli nokta detay tablonda odalarda hangi tarihlerde kimlerin olduğunun kaydını tutman ve sorgularını da buna göre hazırlaman. Aksi halde tarih kaydı ve şartı olmadan bunu anlamak mümkün değildir. Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
sTb
Üye
Mesajlar: 59
Kayıt: 06 Nis 2005 11:13
Konum: Eskişehir

Mesaj gönderen sTb »

Anladığım kadarıyla ;

Kod: Tümünü seç

  
 INNER JOIN "alttablo.db" alttablo
   ON  (anatablo.odano= alttablo.odano)  
şeklinde tabloları bağlamamışsınız. sorun bundan kaynaklanabilir

Saygılarımla
" Her bildiğin doğru olsun. Ama her doğruyu her yerde söylemek doğru değildir. "
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Bu normal bir şey, ana tabloya bağlı alt tabloda 2 adet kaydınız var. Siz de bu iki tabloyu birleştirerek çağırdığınızdan her ikisi de geliyor. eğer ana tablodan sadece tek satırım gelsin diyorsan ozaman iki tabloyu birleştirmeden sadece ana tablonu listelet.
Kullanıcı avatarı
PcText
Üye
Mesajlar: 36
Kayıt: 19 Ağu 2004 04:04
Konum: İstanbul / Alibeyköy
İletişim:

Re: sql kodunda sorun

Mesaj gönderen PcText »

QODAINFO.SQL.CLOSE;
QODAINFO.SQL.Clear;
QODAINFO.SQL.Add('select *from ODAINFO,MUSTERI,KONAKLAMA'); //birbirine master detail bağlı üç tablo
QODAINFO.SQL.Add('where odadurumu='+quotedstr('ODA DOLU')); //master tablodaki odadurumu alanına bakıyo oda dolu yazanları listeliyo
QODAINFO.SQL.Add('and '+quotedstr(datetostr(tarihsorgu.Date))+' between giris and cikis '); //en alt tablom olan konaklama tablosuna bakıyor giri ve çıkış tarihleriyle karşılaştırıyo
QODAINFO.SQL.Add('and INDMUS=ODAID');
QODAINFO.SQL.Add('AND MUSNO2=MUSNO');
if (odasec.Text<>'Tüm Odalar') then
begin
QODAINFO.SQL.Add('and odano='+quotedstr(odasec.Text));
end;
QODAINFO.SQL.Add('ORDER BY ODANO ');

QODAINFO.OPEN;

arkadaşlar tam anlaşılmadım heralde biraz daha açıklayıcı olur belki

1 master alan odainfo
(primery key) - odaid = 1 (değeri)
(oda numarası)-odano= 101(değeri
2 detail alan musteri
(primery key)-musno=2(değeri)
(foreingkey)-ındmus=1 (odaid den alıyo değeri)
musteriadi =ahmet
3 (musteri tablosuna bağlı detail alan) konaklama
(foreingkey)musno2= 2(değeri musnodan alıyo)
giristarihi
cıkıstarihi

şimdi sorun şu
2. detail alan olan musteri tablosuna bir müşteri daha girince
durum şöyle oluyo

1 master alan odainfo
(primery key) - odaid = 1 (değeri)
(oda numarası)-odano= 101(değeri
2 detail alan musteri
(primery key)-musno=3(değeri)
(foreingkey)-ındmus=1 (odaid den alıyo değeri)
musteriadi =ahmet
3 (musteri tablosuna bağlı detail alan) konaklama
(foreingkey)musno2=3(değeri musnodan alıyo)
giristarihi
cıkıstarihi

bu durumu master alanı yukardakisorguya göre gridde listelettiğimde
master alandaki aynı primerykey alanlı satırı iki kere gösteriyo
Dört bir yan kararınca sana yöneldik.Ey ışıklar kaynağı aç kapını biz geldik.
Kullanıcı avatarı
PcText
Üye
Mesajlar: 36
Kayıt: 19 Ağu 2004 04:04
Konum: İstanbul / Alibeyköy
İletişim:

Mesaj gönderen PcText »

naile yazdı:Bu normal bir şey, ana tabloya bağlı alt tabloda 2 adet kaydınız var. Siz de bu iki tabloyu birleştirerek çağırdığınızdan her ikisi de geliyor. eğer ana tablodan sadece tek satırım gelsin diyorsan ozaman iki tabloyu birleştirmeden sadece ana tablonu listelet.
sadece ana tablomu listelettiğimde sorgumun anlamı kalmaz zaten
ana tablomda ki listelenen alanlara göre detail tablolardaki alanları da başka gridlerde göstermem gerek,ana tablom oda bilgileri tablosu detail tablolarımsa müşteri ve konaklama tabloları ilişkili oldukları için hepsi ayrı gridlerde bağlantılı...
Dört bir yan kararınca sana yöneldik.Ey ışıklar kaynağı aç kapını biz geldik.
Kullanıcı avatarı
PcText
Üye
Mesajlar: 36
Kayıt: 19 Ağu 2004 04:04
Konum: İstanbul / Alibeyköy
İletişim:

Mesaj gönderen PcText »

nitrokonat yazdı:karışık bir anlatım olmuş.
gridde raporlamak istediğin müşteri listesi midir?
sorgunun sana vereceği sonucun türkçesi nedir?
yani "hangi müşteri hangi odada kalıyor?" sorusunun cevabını mı verecek,
"odalarda kalanlar kimlerdir?" sorusunun cevabını mı verecek?
odalarda kalanlar kimlerdir sorusunun cevabı giriş tarihi ve çıkış tarihini göz önüne alarak ve odadurum alanının değerine bakarak(boş veya dolu olabilir) ilişkili tablolarımı görmek istiyorum
Dört bir yan kararınca sana yöneldik.Ey ışıklar kaynağı aç kapını biz geldik.
Cevapla