Tetkik randevusunu nasıl vermeliyim?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Tetkik randevusunu nasıl vermeliyim?

Mesaj gönderen NewMember »

Arkadaşlar bir konuda yardımınıza ihtiyacım var.Konunun tam anlaşılabilmesi için biraz uzun yazacağım şimdiden kusura bakmayın.Database Firebird 2.0 Delphi 7
Banko görevlisinin tomografi ve MR randevularını kaydettiği bir kayıt tablom var.Aslında bu randevu kaydı olan bir tablo değil.Hasta bilgileri ve tetkik bilgilerinin, hangi tetkikin hangi tarihte saat kaçta kaç nolu salonda çekileceğini v.s. yazıldığı tetkik kayıt tablosu.Tetkik işlemi sona erince tetkik çekildiği ile boolean bir alana kayıt düşülerek kaydın randevu olmaktan çıkarılması sağlanıyoır.Yani aslında hem tetkiki çeken görevli hemde bankoda kayıt yapan kayıt elemanı da aynı tabloyu kullanıyor.Buraya kadar sorun yok.Benim yapmak istediğim olay şu.Kayıt elemanı randevu vermek için açtığında hangi tarihe hangi salona randevu vermek isterse açılan ekranda o tarihteki randevular listelensin.Boş tarih ve saatler görüntülensin.Orada boş müsait olan bir yeri de seçince oradaki tarihi ve saati de tetkik kayıt tablosuna yazsın.Aslında burada şöyle bir yapı kurmaya çalıştım.Bu randevuları açılan yeni formdaki bir stringgride aktarıp boş alanları göstermeye çalıştım.Ama kayıt düzenlemeler de ve değişiklikler de bazı sorunlarla karşılaştım ve çokta stabil bir yapı olmadı.Aşağıdaki yapı stringgrid yapısı.

Resim



Sonra başka bir yol denemek istedim.Kayıt elemanının randevu almak istediği tarih ve salondaki randevuları bir query ile sorgulayıp bir dbgridde göstereyim.Aslında bu yapı en güzel olan gibi duruyor.Ancak o zamanda bu kayıtlar ardışık olarak sıralanıyor.Oysa ben istiyorum ki saat dilimlerinde randevu olmayan dilimler boş olarak gelsin.Bu yapıda da bunu başaramadım.

Mesela diyelim ki kayıt elemanı 10.01.2009 tarihinde 1 nolu BT salonuna kayıt yapmak istiyor.Randevu vermek için tıklayınca açılan formda ki DBGride o gündeki randevular gelsin.Diyelim 3 tane de randevu olsun. Saat 10:00, 12:30, ve 17:30 olsuın.

Bu DBgridde 3 adet kayıt geliyor doğal olarak.ve Alt alta şu şekilde
10:00 XXX Kişisine BT Boyun çekilecek.
12:3, YYY Kişisine BT Cranio çekilecek.
17:30 ZZZ Kişisine BT Cranio çekilecek.


Oysa benim istediğim ise şu şekilde.
08:00
08:30
09:00
09:30
10:00 XXX Kişisine BT Boyun çekilecek.
10:30
11:00
11:30
12:00
12:30, YYY Kişisine BT Cranio çekilecek.
13:00
...
...
...
17:30 ZZZ Kişisine BT Cranio çekilecek.
...
...
...
...


Böyle bir yapıyı nasıl kurabileceğimi bir türlü çözemedim.JVPlanit diye bir component var ama o da olmuyor.Yada ben intibak ettiremedim.
Stringgrid değil de DBGrid şeklindeki yapıyı tutturabilirsem çok güzel olacak.Dbgrid yapısını oluşturabilmem için acaba ne yapmam gerekir yada farklı nasıl b ir yol izlenebilir.
Değerli görüşleriniz için şimdiden teşekkür ederim....
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Tetkik randevusunu nasıl vermeliyim?

Mesaj gönderen Battosai »

DBGrid de olması zor StringGrid bu iş için en iyisi....StringGrid ile niye olmuyor anlamadım.Mesele Boş randevuları görüp Saatini tayin etmek değilmi ?
Aslında kayıt formunu şu şekilde yaparsan daha basit olur gibi...
-Kayıt formunun bir tarafına bir listbox yerleştirip bir sorgu ve döngü neticesiyle istediğiniz saat dilimlerini ve randevu açıklamalarını buraya listelersiniz.
-Tabiki araya boş olan saat dilimlerini kendiniz ekleyeceksiniz.
-Bunlar listelendikten sonra seçili olan item daki saat değerini copy(S,1,Pos('-',S)-1) gibi bir ifadeyle alıp kayıt yaptırabilirsiniz diye düşünüyorum...

Zamanında stringgrid ile bir randevu sistemi yapmıştım örnek görüntüsünü ekte vereyim böyle bir sistemde kurulabilir.Gerçi ben kayıt ederken tarih ve saat aralığı dolumu diye kontrol ediyordum...Siz buna benzer bir sistemi kendinize göre düzenleyebilirsiniz....
Dosya ekleri
randv.rar
(30.52 KiB) 126 kere indirildi
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: Tetkik randevusunu nasıl vermeliyim?

Mesaj gönderen conari »

saatlerin olduğu bir tablo oluştur.
diğer detay tablonu buraya Joinleyerek getir.
Böylece hem boşları hem doluları görebilirsin.

Tabi günleri eşitlemeyi unutma.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Tetkik randevusunu nasıl vermeliyim?

Mesaj gönderen Battosai »

conari'nin dediği olur ama basit bir kaç kod ile çözülecek bir mevzu için database de luzumzsuz tablo açmak bana göre iyi bir yöntem değil...Bu yöntem,fazladan datasource ve Query kullanılmasına da yol açacaktır...
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Tetkik randevusunu nasıl vermeliyim?

Mesaj gönderen emin_as »

DbGrid ile olmaz, jedi içindeki jvTFDays ile yapabilirsin. Onun içinde böyle günün saatleri özelligi var, jedi ile gelen timeframework u incele, examples klasöründe örnekler de var. Biraz ugraştırır, ama görsellik açısından ugraşmaya deger.
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Tetkik randevusunu nasıl vermeliyim?

Mesaj gönderen NewMember »

Arkadaşlar hepinize çok teşekkür ederim.Hepsi de birbirinden güzel fikirler.Ancak @conari nin söylediğini uyguladım ve aslında istediğimde buydu. Mesela bir tablo açmışım saat başı olarak 24 adet kayıt yaptım ve joinleyerek bunları çekiyorum.

Kod: Tümünü seç

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Text:='SELECT SAATDILIM60.DILIM as Saatler,RADYOLOJIISTEM.TETKIKINCEKILECEGISAAT as Randevu_Saati,'
+'RADYOLOJIISTEM.HASTAADISOYADI as Hasta,RADYOLOJIISTEM.TETKIKADI as ISLEM '
+'FROM SAATDILIM60 LEFT JOIN RADYOLOJIISTEM ON RADYOLOJIISTEM.TETKIKINCEKILECEGISAAT = SAATDILIM60.DILIM '
+'AND RADYOLOJIISTEM.TETKIKINCEKILECEGITARIH=:PARTARIH AND RADYOLOJIISTEM.TETKIKINCEKILECEGISALON=:PARSALON '
+'ORDER BY SAATDILIM60.DILIM';
IBQuery1.ParamByName('PARTARIH').AsDate:=DBYapilacagitarih.Date;
IBQuery1.ParamByName('PARSALON').AsString:=dbsalon.Text;
IBQuery1.Open;
Aslında tam olarak yapmak istediğim olay buydu.
Belki birilerine de faydası olur.
Cevapla