2010-12-02 41 views
0

J'ai une table de rappels dans ma base de données des applicationsl'ajout d'une minuterie pour mettre en œuvre des rappels dans l'application

FieldName = 'id' 
FieldName = 'title' 
FieldName = 'description' 
FieldName = 'start_date' 
FieldName = 'start_time' 
FieldName = 'end_date' 
FieldName = 'end_time' 
FieldName = 'repeat' (true/false) 
FieldName = 'occurs' (Integer = 1-Daily, 2-Weekly, 3-Monthy, 4-Annually) 
FieldName = 'completed" (true/False) 

est-il un moyen d'utiliser un TTimer pour afficher le titre et la description du rappel à chaque fois que l'événement se produit? Si oui, veuillez expliquer en code/seudo code, ou texte.

un rappel est soit un onetime - ou - ne se reproduise événement

si un temps (se produit = 1 jour), la date et l'heure sont stockées dans le start_date & Start Time Le rappel doit afficher à ce temps. Après affichage, le champ de table "Completed" est défini sur true.

Si la répétition se produit, la date et l'heure sont stockées dans le Start_Date & Start Time et la date de fin et l'heure de fin sont stockées. Le rappel doit s'afficher à ce jour et à cette heure, chaque jour (1), semaine (2), mois (3) ou année (4)

Si tous les jours, un rappel doit s'afficher à ce moment tous les jours, jusqu'à la date de fin est atteint

Si hebdomadaire, rappel devrait afficher à ce moment-là, ce jour-là (de chaque semaine), jusqu'à la date de fin est atteinte

Si chaque mois, le rappel devrait afficher à ce moment-là, ce jour-là (de chaque mois), jusqu'à ce que la date de fin soit atteinte

Si Annuellement, le rappel devrait s'afficher à ce moment-là, ce jour particulier (de chaque année), jusqu'à la date de fin e est atteinte

lorsque la date de fin est atteinte, complété est mis à jour avec True

merci, j'espère que cela est facilement faisables avec des composants supplémentaires ou bibliothèques

+1

« s'il vous plaît expliquer dans le code. » - Cela ressemble plus à ce que vous voulez que quelqu'un fasse votre travail pour vous. – GrandmasterB

+0

Non, je ne veux pas que quelqu'un fasse mon code. Si je pouvais expliquer dans le code, je le ferais. Je ne peux pas, à cet effet, je l'ai expliqué dans le texte. Si vous ne voulez pas fournir une réponse, c'est votre perogative. Si vous ou quelqu'un voudrait m'expliquer comment faire cela sans me donner de code, je suis ouvert à toutes les suggestions. - merci – IElite

+0

Là, j'ai changé ma question pour demander soit ou .... merci de me montrer mon erreur – IElite

Répondre

1

Donc, je ne pouvais pas comprendre comment afficher tout le code, mais voici le principal événement TTimer

Procedure TForm1.Timer1Time(Sender: TObject); 
var 
CommandText: String; 
begin 
try 
    Timer1.Enabled:= False; 
    if ADOQuery1.Active then 
    ADOQuery1.Active:= False; 
    CommandText := 
    Format('SELECT * FROM REMINDERS WHERE (START_DATE <= %s) AND (COMPLETED = FALSE) AND (LASTCHECK < %s)', 
    [FormatDateTime('mm/dd/yy', Date), FormatDateTime('mm/dd/yy', Date)]); 
ADOQuery1.SQL.Text := CommandText; 
try 
    ADOQuery1.Active := True; 
    if not ADOQuery1.IsEmpty then 
    begin 
    BuildReminderList(ADOQuery1); 
    end; 
except 
    // 
end; 
finally 
Timer1.Enabled := True; 
    end; 
end; 
3

<ironique>

Votre question: Existe-t-il un moyen d'utiliser un TTimer pour afficher le titre et la description du rappel à chaque fois que l'événement se produit?

Ma réponse

Oui, est-il un moyen de le faire.

Exigence: Si oui, veuillez expliquer le code.

Anwer à fillfull vos besoins

pseudocode:

procedure TEventsManager.SetNextEventTimer; 
begin 
    if Assigned(NextOcurringEvent) then 
    begin 
    Timer1.Interval := MillisecondsBetween(Now, NextOcurringEvent.DateTime); 
    Timer1.Enabled := True; 
    end; 
end; 

procedure TEventsManager.Timer1Timer(Sender: TObject); 
begin 
    Timer1.Enabled := False; 
    DisplayReminder(nextOcurringEvent); 
    SetNextEventTimer; 
end; 

</ironique >

+2

Pourquoi l'ironie? Pourquoi ne pas simplement y répondre sérieusement? –

+0

Je suis d'accord. Je ne comprends pas l'ironie moi-même. Surtout venant de quelqu'un avec une si bonne réputation. Je suppose que la reputation vient au détriment des autres. – IElite

+0

@Rob, @Shane: Je suis désolé, j'étais un peu fatigué de lire des questions incomplètes au moment de l'écriture, sentant aussi la paresse @Shane nous demandant une idée complète (avec code) sans aucun effort réel pour créer le sien et demandez peut-être pour validation/amélioration. Je pensais à plusieurs reprises avant de cliquer sur le bouton post, mais je pense que c'était juste en ce moment et même avec ironie mon pseudo-code est un bon point de départ pour quelqu'un qui n'a aucune idée de la chose, essayant juste de faire brûler un peu de cerveau pour le faire. Peut-être que je me trompe ... Je n'ai aucun regret et bien sûr rien de personnel à @Shane. – jachguate

2

Je sais que vous avez dit sans composants supplémentaires, mais je pense que vous aimerez ça.

En JVCL, il existe un composant appelé TJvScheduledEvents qui peut faire exactement ce dont vous avez besoin et vous pouvez l'utiliser avec très peu de programmation. Essayez-le et si vous avez des questions à ce sujet, n'hésitez pas à demander.

+0

Ce composant est-il un composant de données ou la bibliothèque est-elle compatible avec la base de données? – IElite

+0

Le composant TJvScheduledEvents lui-même n'est pas conscient de DB, mais il possède une propriété appelée AppStorage qui peut être affectée à TJvAppIniFileStorage, TJvAppRegistryStorage ou TJvAppDBStorage. Ceux-ci vous permettent à leur tour de stocker des propriétés dans IniFile, Registry ou Database respectivement. Vous devriez installer JVCL et l'essayer vous-même. – LightBulb

+0

Désolé, je ne suis pas intéressé à stocker quoi que ce soit dans la base de données. Essayant simplement de lire à partir de la base de données à un certain intervalle, de rechercher les rappels qui sont dus, et de les siaplier. Après leur échéance, la mise à jour du champ complété devient True. Aussi simple que cela. Ma question est toujours valable. Puis-je le faire avec un TTimer, et comment. La partie Comment bien sûr signifie comment puis-je déterminer la partie de la date pour déterminer si un rappel est dû pour l'affichage. – IElite