Newsgroup: it.comp.lang.delphi
Titolo: Intervallo di Tempo SQL

Ciao a tutti,
Problema
Vorrei eseguire una query che controlli ,prima che un record venga salvato
sul database, se "l'utente" è già occupato in quel tempo.
Mi spiego meglio:
Table
DATA 
ORAIN
ORAOUT
COGNOME
Combo1 (ORAIN)
Combo2 (ORAOUT)
Combo3 (COGNOME)
DateTimeP. (DATA)
La mia query è così
Query.close;
Query.param...('x').asDAte:=DatetimeP.data;
Query.param...('y').asTime:=Combo1.text;
Query.param...('i').asTime:=Combo2.text;
Query.param...('n').asString:=Combo3.text;
Query.open;
Come posso ora controllare l'intervallo tra Combo1 e combo2 ?
Grazie!!!
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Come posso ora controllare l'intervallo tra Combo1 e combo2 ?
se è solo una differenza tra TDateTime ci sono:
* MilliSecondsBetween function
Returns the number of milliseconds between two specified TDateTime values.
* MilliSecondSpan function
Returns the number of milliseconds between two specified TDateTime values.
* MinutesBetween function
Returns the number of minutes between two specified TDateTime values.
*MinuteSpan function
Returns the number of minutes, including fractions thereof, between two 
specified TDateTime values.
e via dicendo fino agli anni.
-- 
Mauro Falzari 
   [ 
http://digilander.libero.it/mauro.falzari
 ]
 
 "Se guardi nell'abisso, anche l'abisso guarda in te." 
   (Friedrich Nietzsche)

 e via dicendo fino agli anni.
Purtroppo queste funzioni non mi aiutano!!!
Allora, ESEMPIO : 
- PIPPO lavora dalle 10.00 alle 13.15 il 11/02/2004.
Questo viene salvato nel Table ORAIN 10.00 , ORAOUT 13.15 DATA 11/02/2004
e COGNOME PIPPO.
Bene.
Se ora voglio inserire che PIPPO possa lavorare dalle 15.00 alle 18.00 del
11/02/2004, la query dovrebbe controllare che Pippo sia libero!!!
Altrimenti se per esempio l'ora fosse 9.00 - 11.00 del 11/02/2004 mi
dovrebbe dire "ATTENZIONE, PIPPO E'GIA' OCCUPATO A
QUELL'ORA!!!,SOSTITUIRE?"
GRAZIE !!!!


Grazie!!!
Niente ... 
	Ciao
	MassimoB
 



questa funzione potrebbe fare il caso tuo (controlla perchè non ho 
verificato)
type
  TDateTimeRange = record
    Lower, Upper: TDateTime;
  end;
{$B-}
function DateTimeRangeInRange(SubRange, Range: TDateTimeRange): Boolean;
{controlla se SubRange ricade all'interno di Range}
begin
  Result:= (SubRange.Lower > Range.Upper)
    or (SubRange.Upper < Range.Lower)
    or ((SubRange.Lower < Range.Lower) and (SubRange.Upper > Range.Lower))
    or ((SubRange.Upper > Range.Upper) and (SubRange.Lower < Range.Upper))
end;
però se mi dici che lavori all'interno di una query, bisogna vedere quale 
database usi, perchè non potrai di certo utilizzare quella funzione delphi.


> {controlla se SubRange ricade all'interno di Range}
P.S.: o ricade anche parzialmente.
Se hai bisogno di controllare anche che i "bordi" dei range si tocchino(*), 
usa degli >= e <= al posto di > e <
(*) per esempio un range 8.00-12.00 con un range 12.00-20.00



sbagliato, i parametri evitano proprio gli errori che si commettono
inserendo campi data come stringhe.
Ciao, Rocco.

 database usi, perchè non potrai di certo utilizzare quella funzione delphi.
Ti ringrazio per l'interessamento e ti dico che lavoro con
con dei .db (BDE)[purtroppo].
Come posso fare allora?
Grazie.


 quindi se ci sono dei problemi non esitare a dirmelo ... ;)
Ti RINGRAZIO DI CUORE!!! ORA CI LAVORO UN PO' SU E POI DOVREBBE FUNZIONARE
TUTTO !!!!! GRAZIE ANCORA E A PRESTO!!!


 con dei .db (BDE)[purtroppo].
comunque la funzione era sbagliata, perchč era molto piů semplice:
type
  TDateTimeRange = record
    Lower, Upper: TDateTime;
  end;
{$B-}
function DateTimeRangeInRange(SubRange, Range: TDateTimeRange): Boolean;
{controlla se SubRange ricade all'interno di Range}
begin
  Result:= not (SubRange.Lower > Range.Upper)
    or not (SubRange.Upper < Range.Lower)
end;


 end;
GRAZIE ORA FUNZIONA !!!!
IRENE
