Randevu Boşluklarını DBGridde gösterebilmek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Randevu Boşluklarını DBGridde gösterebilmek
Arkadaşlar sorunum kısaca şöyle.Bir randevu tablom var gün içindeki değişik saatlere randevu yazdırıyorum.Ve bunları bir sorgu ile db gridde gösteriyorum.
Örnek
Randevusaati
09:00
09.30
13:30
17:30
Bu şekilde dbgridde sıralanıyor.Ama müşteriinin istediği şu.DBGridde aşağıdaki gibi sıralanmasını istiyor.
09:00
09.30
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
13:30
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
17:30
Yani randevu alınmayan saatler boş satır olarak dbgridde gösterilnmeli.Bunu nsaıl yapabilirim bir fikriolan varmı?
Teşekkürler..
Örnek
Randevusaati
09:00
09.30
13:30
17:30
Bu şekilde dbgridde sıralanıyor.Ama müşteriinin istediği şu.DBGridde aşağıdaki gibi sıralanmasını istiyor.
09:00
09.30
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
13:30
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
boşsatır
17:30
Yani randevu alınmayan saatler boş satır olarak dbgridde gösterilnmeli.Bunu nsaıl yapabilirim bir fikriolan varmı?
Teşekkürler..
Re: Randevu Boşluklarını DBGridde gösterebilmek
DBGrid ile yapamazsın.
Stringrid kullanabilirsin veya jedi deki takvim bileşenlerini kullanabilirsin.
Jedideki takvim bileşenleri haftalık, günlük ve aylık gösterime sahipler.
Jedi ile gelen örnekleri inceleyip, nasıl kullanıldığını çözebilirsin.
Stringrid kullanabilirsin veya jedi deki takvim bileşenlerini kullanabilirsin.
Jedideki takvim bileşenleri haftalık, günlük ve aylık gösterime sahipler.
Jedi ile gelen örnekleri inceleyip, nasıl kullanıldığını çözebilirsin.
Re: Randevu Boşluklarını DBGridde gösterebilmek
şöyle birşey yapsan olur mu?
boş olan saatleri font rengini zemin rengi (beyaz mesela) ile aynı yapsan orda hiiçbirşey gözükmez.
boş olan saatleri font rengini zemin rengi (beyaz mesela) ile aynı yapsan orda hiiçbirşey gözükmez.
Re: Randevu Boşluklarını DBGridde gösterebilmek
varyemez yazdı:şöyle birşey yapsan olur mu?
boş olan saatleri font rengini zemin rengi (beyaz mesela) ile aynı yapsan orda hiiçbirşey gözükmez.
işte o tamamda boş saatleri gösterebilmek sorun.
Jedideki takvim bileşenlerinin dbdeki o alanla ilişkisini kuramadım bir türlü.Yani projeme ayarlayamadım.
Stringgridde de hiç işim olmadı.Bir deneyeyim bakalım...
Re: Randevu Boşluklarını DBGridde gösterebilmek
s.a.
kayıtları nasıl tutuyorsun bilmiyorum ama
içinde randevu olsun olmasın tüm satlerin olduğu bir tablon olur.
randevularıda o tabloya joinle ekleyip ekranda gösterirsen olur gibime geliyor.
kolay gelsin.
kayıtları nasıl tutuyorsun bilmiyorum ama
içinde randevu olsun olmasın tüm satlerin olduğu bir tablon olur.
randevularıda o tabloya joinle ekleyip ekranda gösterirsen olur gibime geliyor.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Randevu Boşluklarını DBGridde gösterebilmek
aslangeri yazdı:s.a.
kayıtları nasıl tutuyorsun bilmiyorum ama
içinde randevu olsun olmasın tüm satlerin olduğu bir tablon olur.
randevularıda o tabloya joinle ekleyip ekranda gösterirsen olur gibime geliyor.
kolay gelsin.
@aslangeri tavsiyene uyarak şöyle birşey yaptım.Ama sql yapısını halledemedim.Buraya ayrıntılı olarak yazayım.Belki sql konnsunda yardımcı olabilirsin.
Şimdi randevu kayıtlarının tutulduğu tablomda hastaadısoyadi,muayenesaati v.b. alanlarım var.
Birde başka bir tabl oluşturdum.Adınıda saatkontrol yaptım.Ve o tabloya 10 ar dk aralar ile gün içindeki saat dilimlerin girdim.Forma bir dbgrid koydum.Dbgridi bağladığım datasetede aşağıdaki sql cümlesini yazdım.
Kod: Tümünü seç
dm.SaatKontrolDataset.SelectSQL.Clear;
dm.SaatKontrolDataset.SelectSQL.text:='SELECT MUAYENEISTEM.HASTAADISOYADI,SAATKONTROL.SAAT FROM SAATKONTROL,MUAYENEISTEM WHERE MUAYENEISTEM.MUAYENETARIHI=:PARTARIH AND '
+ 'MUAYENEISTEM.POLIKLINIKODASI=:PARPOLIKLINIK AND MUAYENEISTEM.TAKIPDURUMU=:PARTKP and MUAYENEISTEM.MUAYENESAATI=SAATKONTROL.SAAT';
dm.SaatKontrolDataset.ParamByName('PARTARIH').AsDate :=
dm.MUAYENEISTEMDatasetMUAYENETARIHI.AsDateTime;
dm.SaatKontrolDataset.ParamByName('PARPOLIKLINIK').AsString :=
dm.MUAYENEISTEMDatasetPOLIKLINIKODASI.AsString;
dm.SaatKontrolDataset.ParamByName('PARTKP').AsString := 'RANDEVU VERİLDİ';
dm.SaatKontrolDataset.open;

Re: Randevu Boşluklarını DBGridde gösterebilmek
s.a.
randevu saatlerinide uygun şekilde vermeniz lazım. dakika 10 ve katları olacak şekilde. 15 e randevu verdiğiniz zaman görünmez. bunun için değişik kontroller yapılabilir. ancak kayıtların gelmemesinin esas sorunu inner join yapmış olmanız. left join yaparsanız aradaki farkı görebilirsiniz. sql kodunuzun şöyle birşey olması gerekiyor.
oluşturduğunuz query bu şekilde olursa sanırım probleminiz hallolur.
ancak tablolarınızın yapısını tam olarak bilemediğim için düzenleme yapmanız gerekebilir.
kolay gelsin.
randevu saatlerinide uygun şekilde vermeniz lazım. dakika 10 ve katları olacak şekilde. 15 e randevu verdiğiniz zaman görünmez. bunun için değişik kontroller yapılabilir. ancak kayıtların gelmemesinin esas sorunu inner join yapmış olmanız. left join yaparsanız aradaki farkı görebilirsiniz. sql kodunuzun şöyle birşey olması gerekiyor.
Kod: Tümünü seç
'SELECT MUAYENEISTEM.HASTAADISOYADI,SAATKONTROL.SAAT
FROM SAATKONTROL
LEFT JOIN MUAYENEISTEM ON MUAYENEISTEM.MUAYENESAATI=SAATKONTROL.SAAT
WHERE MUAYENEISTEM.MUAYENETARIHI=:PARTARIH AND
MUAYENEISTEM.POLIKLINIKODASI=:PARPOLIKLINIK AND
MUAYENEISTEM.TAKIPDURUMU=:PARTKP
ancak tablolarınızın yapısını tam olarak bilemediğim için düzenleme yapmanız gerekebilir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Randevu Boşluklarını DBGridde gösterebilmek
Bir tabloda ( varsayılanlar tablosu varsa ) randevu verilebilecek tüm saatlerin girilmesi halinde, @aslangeri'nin de bildirdiği gibi boş randevular LEFT JOIN ile görüntülenebilir.
LEFT JOIN (soldakine dahil et gibi bir anlamı olduğunu değerlendirince) çalışma mantığı, asıl liste saatler listesi olacak, ona dahil edilecek kayıtlar ise verilmiş randevular olacaktır. Randevu verilmemiş ise o saatler görüntülenecek ama yanı boş kalacaktır.
Ayrıca projene eklemek isteyebileceğin bir özellik olabilir diyerek belirtmek istiyorum; kendi projelerimde bir adım daha ileri olarak, haftanın günlerini ve özel tatilleri de dahil ediyorum ki, Hafta içi bir tarih için 09:00 - 18:00 saat aralıklarını 30 dakikalık dilimlerle gösterip, özel tatil ve hafta sonlarında ayarlarda belirtilen kadarıyla örneğin 09:00 - 14:00 aralığını veya kullanıcının seçtiği saatleri tabloda yansıtıyorum. Bunun için kontrolünü de ekleyip haftanın gününe göre ilgili saatlerin gösterilmesi sağlanmalıdır.
Şimdi bu mihmalde SQL kurgusu şöyle olmalı. ( örnekte göreceğin gibi başrolde RandevuSaatleri, yardımcı rolde MuayeneIstemi oluyor )
NOT: Aynı saatte birden fazla randevu yazılmışsa veya yazılacaksa alt alta aynı saatler yinelenecektir.
başarılar...
LEFT JOIN (soldakine dahil et gibi bir anlamı olduğunu değerlendirince) çalışma mantığı, asıl liste saatler listesi olacak, ona dahil edilecek kayıtlar ise verilmiş randevular olacaktır. Randevu verilmemiş ise o saatler görüntülenecek ama yanı boş kalacaktır.
Ayrıca projene eklemek isteyebileceğin bir özellik olabilir diyerek belirtmek istiyorum; kendi projelerimde bir adım daha ileri olarak, haftanın günlerini ve özel tatilleri de dahil ediyorum ki, Hafta içi bir tarih için 09:00 - 18:00 saat aralıklarını 30 dakikalık dilimlerle gösterip, özel tatil ve hafta sonlarında ayarlarda belirtilen kadarıyla örneğin 09:00 - 14:00 aralığını veya kullanıcının seçtiği saatleri tabloda yansıtıyorum. Bunun için kontrolünü de ekleyip haftanın gününe göre ilgili saatlerin gösterilmesi sağlanmalıdır.
Şimdi bu mihmalde SQL kurgusu şöyle olmalı. ( örnekte göreceğin gibi başrolde RandevuSaatleri, yardımcı rolde MuayeneIstemi oluyor )
NOT: Aynı saatte birden fazla randevu yazılmışsa veya yazılacaksa alt alta aynı saatler yinelenecektir.
Kod: Tümünü seç
SELECT RandevuSaatleri RS FROM Varsayilanlar
LEFT JOIN MUAYENEISTEM MI ON ( MI.MUAYENESAATI = RS.SAAT )
WHERE 1=1
AND MI.MUAYENETARIHI=:PARTARIH
AND MI.POLIKLINIKODASI=:PARPOLIKLINIK
AND MI.TAKIPDURUMU=:PARTKP
ORDER BY RS.Saat
Re: Randevu Boşluklarını DBGridde gösterebilmek
@aslangeri ilgine çok teşekkür ederim.Ama left join,right join v.b. tüm varyasyonları denedim ama sonuç alamadım.
@mrmarman en kısa zamanda deneyeceğim.Her ikinize de teşekkürler...
@mrmarman en kısa zamanda deneyeceğim.Her ikinize de teşekkürler...
Re: Randevu Boşluklarını DBGridde gösterebilmek
s.a.
aklıma iki ihtimal geliyor.
biri sqlde bir hata olması diğeri
diğeride karşılaştırma yaptığın alanların birbirine eşit olmaması.
(saat ile tarihsaat karşıllaştırması vs)
kolay gelsin.
aklıma iki ihtimal geliyor.
biri sqlde bir hata olması diğeri
diğeride karşılaştırma yaptığın alanların birbirine eşit olmaması.
(saat ile tarihsaat karşıllaştırması vs)
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Re: Randevu Boşluklarını DBGridde gösterebilmek
aslangeri hocam.Sql hata vermiyor sonuç dönüyor ama sadece randevu olan saat aralıkları dönüyor diğerlerini göstermiyor.aslangeri yazdı:s.a.
aklıma iki ihtimal geliyor.
biri sqlde bir hata olması diğeri
diğeride karşılaştırma yaptığın alanların birbirine eşit olmaması.
(saat ile tarihsaat karşıllaştırması vs)
kolay gelsin.
ikinci ihtimal dediğiniz ise alan tiplerini diyorsanız alan tipleri aynı.
Re: Randevu Boşluklarını DBGridde gösterebilmek
@mrmarman ve @aslangeri
Topiki biraz fazla uzattım ama biraz daha ayrıntılı yazayım.
Şimdi benim muayeneistem adında bir tablom var.
---Bu tabloda randevunun alınma tarihini içeren alan = MUAYENETARIHI ----->DateTime tipinde
---Bu tabloda randevunun alınma saatini içeren alan = MUAYENESAATI ----->Time tipinde
---Bu tabloda randevunun alındığı hastanın adısoyadını içeren alan = HASTAADISOYADI----->String tipinde
---Bu tabloda randevunun alındığı poliklinik bilgisini içeren alan = POLIKLINIKODASI----->String tipinde
---Bu tabloda randevunun hangi aşamada olduğu bilgisini içeren alan = TAKIPDURUMU----->String tipinde
Birde SAATKONTROL diye bir tablom var.Bu tabloda iki alan var
1.KAYITID------>Integer tipte
2.SAAT----->Time TipindeBu tabloya IBExpert üzerinden 10 dk aralıklarla veri girişi yaptım.
00:00 dan başlayarak 23:50' a kadar
Görüntüsü aşağıda.

Sizlerin vermiş olduğunuz kodları da bu tablolara göre aşağıdaki gibi düzenledim.
IBDatasetin datasourcunun bağlandığı gridin ekran görüntüsü aşağıda.Her şey normal gibi görünüyor ama sonuç aşağıdaki gibi dönüyor.
Nerde hata yapıyoruz anlayamadım.
İlginize tekrar teşekkürler...

Topiki biraz fazla uzattım ama biraz daha ayrıntılı yazayım.
Şimdi benim muayeneistem adında bir tablom var.
---Bu tabloda randevunun alınma tarihini içeren alan = MUAYENETARIHI ----->DateTime tipinde
---Bu tabloda randevunun alınma saatini içeren alan = MUAYENESAATI ----->Time tipinde
---Bu tabloda randevunun alındığı hastanın adısoyadını içeren alan = HASTAADISOYADI----->String tipinde
---Bu tabloda randevunun alındığı poliklinik bilgisini içeren alan = POLIKLINIKODASI----->String tipinde
---Bu tabloda randevunun hangi aşamada olduğu bilgisini içeren alan = TAKIPDURUMU----->String tipinde
Birde SAATKONTROL diye bir tablom var.Bu tabloda iki alan var
1.KAYITID------>Integer tipte
2.SAAT----->Time TipindeBu tabloya IBExpert üzerinden 10 dk aralıklarla veri girişi yaptım.
00:00 dan başlayarak 23:50' a kadar
Görüntüsü aşağıda.

Sizlerin vermiş olduğunuz kodları da bu tablolara göre aşağıdaki gibi düzenledim.
Kod: Tümünü seç
dm.IBDataSet1.SelectSQL.Clear;
dm.IBDataSet1.SelectSQL.Text := 'SELECT SAATKONTROL.SAAT,MUAYENEISTEM.HASTAADISOYADI FROM SAATKONTROL' +
' LEFT JOIN MUAYENEISTEM ON ( MUAYENEISTEM.MUAYENESAATI = SAATKONTROL.SAAT )' +
'WHERE 1=1 ' +
'AND MUAYENEISTEM.MUAYENETARIHI=:PARTARIH ' +
'AND MUAYENEISTEM.POLIKLINIKODASI=:PARPOLIKLINIK ' +
'AND MUAYENEISTEM.TAKIPDURUMU=:PARTKP ' +
'ORDER BY SAATKONTROL.SAAT';
dm.IBDataSet1.ParamByName('PARTARIH').AsDate := DBYapilacagitarih.Date;
dm.IBDataSet1.ParamByName('PARPOLIKLINIK').AsSTRING := dbPOLIKLINIK.Text;
dm.IBDataSet1.ParamByName('PARTKP').Asstring := 'RANDEVU VERİLDİ';
dm.IBDataSet1.open;
Nerde hata yapıyoruz anlayamadım.
İlginize tekrar teşekkürler...

Re: Randevu Boşluklarını DBGridde gösterebilmek
yazmışsınız bu durumda null olanlar gelmeyecektirKod: Tümünü seç
AND MUAYENEISTEM.MUAYENETARIHI=:PARTARIH AND MUAYENEISTEM.POLIKLINIKODASI=:PARPOLIKLINIK AND MUAYENEISTEM.TAKIPDURUMU=:PARTKP
tahminimce şöyle birşey istediğiniz sonucu getirecektir
Kod: Tümünü seç
and
(
AND MUAYENEISTEM.MUAYENETARIHI=:PARTARIH
AND MUAYENEISTEM.POLIKLINIKODASI=:PARPOLIKLINIK
AND MUAYENEISTEM.TAKIPDURUMU=:PARTKP
)
or
(MUAYENEISTEM.MUAYENETARIHI is null)
Re: Randevu Boşluklarını DBGridde gösterebilmek
Bir kelimenin anlamını öğretsen bile yeter..



Re: Randevu Boşluklarını DBGridde gösterebilmek
conari yazdı:Sanırım aynı olayı burada sormuştunuz ve başarmıştınız.
viewtopic.php?f=2&t=24933&p=141115#p141115
sevgili conari.doğru söylüyorsunuz onu başardım ancak o kod ile yukarıdaki kodlar arasında fark yok.Hepsi yukardaki sonuçları (Resimler) döndürüyor.Ben boş saatlerinde gelmesini istiyorum.Lost Soul arkadaşımızın dediğini deneyeceğim şimdi....