Selemun Aleykum
Öncelikle herkeze hayırlı ramazanlar diliyorum.
Bir ajanda programına anaforma hatırlatma için sorgu çalıştırıyorum. sorguyu devamlı çalışması için timer nesnesine yazıyorum. Fakat soprgulamaya saat kriteri konulunca herhangi bi mesaj vermiyor. saati kaldııp sadece tarih oluncada devamlı veriyor mesajı. İşin içinden çıkmam için yardımcı olabilirmisiniz. Yazdığım kod aşşağıdadır.
procedure TAnaform.Timer1Timer(Sender: TObject);
var
a:integer;
sat:TTime;
begin
sat:=time;
query1.close;
query1.sql.clear;
query1.sql.add('select konu from ajanda');
Query1.sql.Add('where Hatirlatma=:Hatirx and Tarih=:tarihx and Saat=:saatx');
query1.Params.Items[0].Asinteger:=0;
query1.Params.Items[1].AsDate:=datetimepicker1.Date;
query1.Params.Items[2].Astime:=(sat);
query1.Open;
query1.First;
for a:=1 to Query1.RecordCount do
begin
showmessage('Bu güne ait '+Query1.FieldByName('KONU').AsString+' konulu notunuz vardır');
query1.Next;
end;
end;
Aleyküm selam. Bu şekilde hatırlatma yapacak olursan, bütün randevular kaçar Şayet Senin saat 15:00 te bir randevun varsa tam 15:00 te hatırlatacak. Bu yüzden hbahadir'in da dediği gibi hatırlatma saatinden sonraki bütün hatırlatmaları göstermesi iyi olacaktır.
hbahadir yazdı:öncelikle veri tabanına bir alan ekleyip hatırlatma işlemi tamamlandığında o alana hatırlatıldı diye işeretlet bence. ve saat sorgulamasınıda
procedure TAnaform.Timer1Timer(Sender: TObject);
var
a:integer;
sat:TTime;
begin
sat:=time;
query1.close;
query1.sql.clear;
query1.sql.add('select Konu, Tarih, Saat from ajanda');
Query1.sql.Add('where Hatirlatma=:Hatirx and Tarih=:tarihx and Saat>:saatx and Hatirlatildi is null');
query1.Params.Items[0].Asinteger:=0;
query1.Params.Items[1].AsDate:=datetimepicker1.Date;
query1.Params.Items[2].Astime:=(sat);
query1.Open;
query1.First;
for a:=1 to Query1.RecordCount do
begin
If MessageDlg('Bu güne ait '+Query1.FieldByName('KONU').AsString+' konulu notunuz vardır', mtWarning, [mbyes, mbno],0) = mryes then
begin
query2.Close;
query2.SQL.Clear;
query2.SQL.Add('update ajanda set Hatirlatildi=1');
query2.SQL.Add('where Tarih=:tarx and Konu=:konx and Saat=:satx');
query2.Params.Items[0].Asdate:=datetimepicker1.Date;
query2.Params.Items[1].Asstring:=Query1.FieldByName('KONU').AsString;
query2.Params.Items[2].Astime:=Query1.FieldByName('Saat').AsDateTime;
query2.ExecSQL;
end
else
query1.Next;
end;
end;
Bu şekilde bi sorun yok düzgün çalışıyor. Yalnız ben genede cep telefonlarınd olduğu kurduğum saatte mesaj vermesini istiyorum. Bu şekilde o gün içinde bu saatten sonraki üm mesajları ekrane getirecek. Zaten kişi ona hatırlatılması istenilen saate mesaj yazacak yanlışmı düşünüyorum. Cevaplarınız için teşekkürler
Saat>:saatx yerine 2 parametre kullan..
Saat>:saatx1 , Saat<:saatx2 , saatx1 ile saatx2 arasındaki fark Timer1.Interval dan en az 2 kat büyük olacak şekilde ayarlamalısın..
Not: Programın sürekli çalıştırıldığını varsayıyoruz . Ara verilirse ilk sorgusunda tek parametreli kullanmak gerekecek..