Search  
Saturday, February 11, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Baza date pentr...
 Baza date pentru programari
 
 7/1/2010 5:36:52 PM
User is offlinemistral05
2 posts


Baza date pentru programari
 (N/A)
buna! sunt incepatoare in lucrul cu foxpro, deci nu va suparati daca intrebarea vi se pare prea simpla...
Cum pot sa fac o baza de date pentru programari (la un salon, cabinet medic, etc) in care programarile sa nu se suprapuna?
de ex: clientul X face programare la ora 10:00 la Y. urmatorul client nu va putea face programare la Y decat incepand cu ora 11:00
 7/1/2010 6:24:29 PM
User is offlineDaniel Buduru
2141 posts
1st




Re: Baza date pentru programari
 (N/A) Modified By Daniel Buduru  on 7/1/2010 5:31:03 PM)
O varianta este urmatoatea:
- data si ora de inceput a programarii  (datetime)
- data si ora de sfarsit a programarii  (datetime)
- id post de lucru sau persoana pentru care se face rezervarea (poate fi integer)
- id client (poate fi integer)
- id rezervare, cheie primara (poate fi integer autoincrement)

Un exemplu:

CREATE CURSOR crsrez (ti t, tf t, idoperator i, idclient i, idrezervare i autoinc)
INSERT INTO crsrez (ti, tf) VALUES (DATETIME(2010,07,01,09,00,00), DATETIME(2010,07,01,10,00,00))
INSERT INTO crsrez (ti, tf) VALUES (DATETIME(2010,07,01,13,00,00), DATETIME(2010,07,01,14,00,00))
INSERT INTO crsrez (ti, tf) VALUES (DATETIME(2010,07,01,16,00,00), DATETIME(2010,07,01,17,00,00))

Acum vrem sa facem o rezervare, la ora 12:30 cu durata de o ora
t1=datetime(2010,07,01,12,30) &&ora de inceput a rezervarii
t2=t1+60*60 && ora de sfarsit a rezervarii
Verificam daca exista vreo rezervare care sa se suprapuna peste rezervarea dorita:

SELECT * FROM crsrez WHERE ti=<t1 AND tf>t1 ; &&testam daca exista o programare care incepe inainte de t1 si se terimna dupa t1
UNION ;
SELECT * FROM crsrez WHERE ti=<t2 AND tf>=t2 && testam daca exista o programare care incepe inainte de t2 si se termina dupa t2

Pentru verificare in cod poate fi folosita expresia asta:

SELECT * FROM crsrez WHERE ti=<t1 AND tf>t1 UNION select * FROM crsrez WHERE ti=<t2 AND tf>=t2  INTO cursor crsocupat

IF RECC('crsocupat')>0
  * exista cel putin o programare care se suprapune - se poate afisa crsocupat
ELSE
  * rezervarea poate fi facuta
ENDIF

Se pot pune si alte conditii, in alte tabele, cum ar fi intervalul orar in care se pot face programarile, pe zilele saptamanii, perioadele in care postul de lucru sau persoana x nu sunt disponibile, si altele.

Daniel Buduru
 7/2/2010 7:42:51 PM
User is offlinemistral05
2 posts


Re: Baza date pentru programari
 (N/A)
Eu ma gandeam sa restrictionez cumva orele pt programare in functie de postul de lucru; joia sa fie disponibil doar postul01, marti doar poatul02, etc., dar o sa incerc cum ai spus tu, k mi-ai dat niste idei
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Baza date pentr...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement