(Mantığını kuramadığım ve doyurucu örnekler bulamadığım için sorma ihtiyacı duydum.)
Şöyle bir derdim var fakat öncesinde tasarladığım yapıyı anlatayım;
1) Bir olay tablom var. Bu tablonun (Pasif(bit), Baslangic(DateTime), Bitis(DateTime), Tetiklenme(DateTime), PeriyotTipi(Str), PeriyotGun(Int), PeriyotHafta(Int), H1, H2, H3, H4, H5 ve H7(Boolean), OlayAdi(Str), SQL(Str)) diye alanları var.
2) Bir Timer'im var. Bu Timer Tetiklenme zamanı gelen kaydın SQL kodunu execute ediyor.
3) Periyot Tipi şimdilik 3 değer alıyor {Tek, Günlük, Haftalık}. Şimdi ben bu Tek ve Günlük kipte bir sonraki Tetiklenme zamanını hesaplatabiliyorum.
a) Tek'te sonraki tetiklenme olmuyor.
b) Günlükte ise Tetiklenme zamanını şu formüle göre hesaplatıyorum;
Kod: Tümünü seç
var
QRY: TADODataSet;
Begin
...
if (PeriyotTipi = 'Günlük') then begin
PeriyotGun := QRY.AsInteger('PeriyotGun');
aTarih := IncDay(Baslangic, PeriyotGun);
while (aTarih < aBugun) do begin
aTarih := IncDay(aTarih, PeriyotGun);
end;
Result := aTarih;
end else
...
Şimdi mesela 2 hafta sonrası için salı ve cuma günleri işaretli bir olay için "bir sonraki" Tetiklenme tarihini nasıl hesaplayabilirim?
Sorunlar şuralarda da ortaya çıkıyor. Mesela diyelim ki bugünden itibaren 2 hafta sonrasına salı ve cuma günlerine bir olay tanımı olsun;
1) Bunun birinci adımında olayın çalıştırıldığı en son tetiklenme tarihinden itibaren üzerine 2 hafta ekleyelim diyelim. En son cuma günü çalıştırıldığı için üzerine iki hafta eklediğimizde iki hafta sonraki cuma gününe geçiyor, halbuki 2 hafta sonraki cuma gününe değil, 2 hafta sonraki salı gününe geçiş yapması gerekir.
2) Yine aynı örnek üzerinden gidersek; Bir şekilde "salı" problemini çözdüğümüzü varsayım, son tetiklenme tarihine göre üzerine yine 2 hafta ekleneceği için 3 gün sonraki cuma gününe tetiklenmesi gerekirken 2 hafta sonraki salı gününe geçiş yapıyor.
Bunun çözümü nedir? Ben hakikaten bu noktada tıkandım sizce nasıl bir kurgu yapmalıyım?