Sorgu ile müsait saat aralığına randevu verebilmek.....

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Sorgu ile müsait saat aralığına randevu verebilmek.....

Mesaj gönderen NewMember »

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.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: Sorgu ile müsait saat aralığına randevu verebilmek.....

Mesaj gönderen rsimsek »

İ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!!
Kullanıcı avatarı
NewMember
Üye
Mesajlar: 990
Kayıt: 29 Haz 2005 06:57
Konum: Bursa

Re: Sorgu ile müsait saat aralığına randevu verebilmek.....

Mesaj gönderen NewMember »

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;
Cevapla