Arkadaşlar sorunum şu.
Bir randevu tablom var ev fieldleri ve dataları aşağıdaki gibi olsun
islemadi bsalamasaati bitissaati
xxx 08:00 08:20
yyy 08:20 08:40
sss 08:50 09:10
ZZZ 12:00 12:20
.......... ............. ...........
Kurmak istediğim sorgu şu.Bu tabloyu tarayıp ilk müsait olan boşluğu tayin edecek.Yani buradaki baslamasaati 09:10ve bitis saati 09:30 olan aralığı bulabilecek.Bir önceki aralıktada 08:40 08:50 arası müsait görünüyor ama işlem süresi olan 20 dakikaya yetmediği için burayıda es geçmeli.
Nasıl bir sorgu lurabilirim yardım ederseniz sevinirim.
Sorgu ile müsait saat aralığına randevu verebilmek.....
Re: Sorgu ile müsait saat aralığına randevu verebilmek.....
İlgili ilk kayıta konumlanıp bsalamasaati değerine işlem saati eklenerek bitissaati değerinden küçük eşit olması kontrol edilebilir. Şart sağlanmıyorsa istenen tarihe ait bir sonraki kayıta geçilir.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Re: Sorgu ile müsait saat aralığına randevu verebilmek.....
Recep abi teşekkürler.Söylediğin gibi yaptım.Belki bşkalarına da benzer kod gerekebilri yada faydalınabilir.
Kod: Tümünü seç
procedure TFrmRandevuEkle.DefaultRandevuyuVer;
var
QueryY: TIBQuery;
Saat_A ,Saat_Z:TTime;
begin
inherited;
if dm.RANDEVUDataset.State in[dsedit] then
begin
exit;
end;
QueryY := TIBQuery.Create(Self);
QueryY.Database := dm.IBDatabase1;
QueryY.SQL.Clear;
QueryY.SQL.Text :=
'SELECT RANDEVU.RSAATI,RANDEVU.BITISSAATI FROM '
+ 'RANDEVU WHERE RANDEVU.RTARIH=:PARTARIH AND '
+ 'RANDEVU.RSALON=:PARSALON AND RANDEVU.TAKIPDURUMU=:PARTKP ORDER BY RANDEVU.RSAATI';
QueryY.ParamByName('PARTARIH').AsDate := DBYapilacagitarih.Date;
QueryY.ParamByName('PARSALON').AsString := dbsalon.Text;
QueryY.ParamByName('PARTKP').AsString := 'RANDEVU VERİLDİ';
QueryY.Open;
if QueryY.RecordCount<1 then
begin
dm.RANDEVUDataset.FieldByName('RSAATI').AsDateTime:=strtotime('08:00');
end;
QueryY.First;
while not QueryY.Eof do
begin
Saat_Z:= QueryY.FieldByName('BITISSAATI').AsDateTime;
QueryY.Next;
Saat_A:= QueryY.FieldByName('RSAATI').AsDateTime;
if MinutesBetween(saat_a,saat_z)>=islemsuresi then
begin
dm.RANDEVUDataset.FieldByName('RSAATI').AsDateTime:= Saat_Z;
dm.RANDEVUDataset.FieldByName('BITISSAATI').AsDateTime:= Saat_Z+islemsuresi;
exit;
end;
end;
QueryY.free;
end;