Evenement sur datetime

Résolu
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 25 janv. 2012 à 10:24
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 2 juil. 2012 à 11:40
Bonjour tout le monde,

Après quelques temps passé sur d'autres langages, me voilà de retour sur ce merveilleux EDI... J'espère que l'ambiance du forum est toujours aussi bonne !

Ma question :
Existe-t'il un moyen de programmer simplement sous Delphi un événement sur une date et heure particulière autrement qu'avec un timer ?
Pour expliquer un peu le dev :
Soient des automates et un serveur. Le serveur dispose de la liste des automates. Chaque automate peut être interrogé par le serveur à une ou plusieurs heures particulières définies par l'utilisateur (ex : automate 1 interrogé à 08h00 et 15h00, automate 2 à 09h00, 12h00 et 18h00...). Je me demande s'il est possible de créer dynamiquement des événements "on08h00", "on15h00", etc... qui se déclencheront respectivement à 08h00, 15h00 etc, sans me lancer pour autant dans un développement de classe.
Je ne pense pas retenir cette solution car en cas de plantage et de redémarrage, il faut que j'interroge les automates que j'aurai dû appeler pendant la durée du plantage, mais bon, techniquement ça me semble un sujet intéressant, non ?

Simon

17 réponses

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
25 janv. 2012 à 18:29
Salut Simon,

Content de ton retour. :)

Alors, perso, je commencerais peut-être par rechercher une piste du côté des API :
CreateWaitableTimer
et
WaitForSingleObject

C'est sûr que le sujet est intéressant et j'espère qu'il y aura beaucoup d'autres idées...
3
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
26 janv. 2012 à 09:16
Salut Cari !
Bien content de te retrouver !
Merci pour ta réponse, je vais jeter un oeil dessus. Le truc c'est qu'il faudrait que, dans le cas où je pourrais avoir un plantage à 07h00 et que le programme n'est relancé qu'à 09h00 (j'essaie d'envisager un peu tous les cas catastrophe...), le programme déclenche quand même tous les événements entre 07h00 et 09h00. J'ai aussi vu hier un composant natif du genre "ActionList", mais je n'ai pas investigué plus loin. Je vous tiens au courant...

Simon
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
2 févr. 2012 à 11:29
Bonjour,

Existe-t'il un moyen de programmer simplement sous Delphi un événement sur une date et heure particulière autrement qu'avec un timer ?

Tu peux aussi simplement créer une tache windows..
ça marche très bien.

cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
2 févr. 2012 à 11:38
bonjour Cantador,

Tu peux m'en dire un peu plus ? Qu'est ce que tu appelles une tâche Windows ?


Simon
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
2 févr. 2012 à 12:41
dans ton panneau de configuration, il y un module 'Taches planifiées"

qui te permet de lancer un exécutable à un jour et une heure précise,
et même avec une périodicité (jour, mois, semaine etc..)

Bref, à l'instant t défini, ton exécutable se déclenche, te permettant d'effectuer automatiquement tout ce que bon te semble..

bien sûr avec les droits disponibles détenus par celui qui met en place la tache.


cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
6 févr. 2012 à 09:47
Ok, je viens de regarder les tâches planifiées, mais ça ne me convient pas. Je vais jeter un oeil à l'API et puis sinon, je prendrai un timer...
Merci encore en tous cas pour vos réponses.

Simon
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
6 févr. 2012 à 22:05
tu peux aussi utiliser un composant..
il doit y en avoir qui font ça dans la palette JEDI


cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
7 févr. 2012 à 10:25
pfff ne m'en parle pas, je suis en train de batailler pour installer la JVCL sur le nouveau joujou XE2. (j'ai dû mal démarrer, et du coup...)

Simon
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
8 févr. 2012 à 22:29
sur le nouveau joujou XE2.

Il te faut les versions JCL et JVCL pour XE2
et les installer dans l'ordre.

cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
9 févr. 2012 à 10:14
Oui, j'avais récupérer les bonnes sources. Le problème, c'est qu'il y avait une erreur dans une unité (de mémoire il me semble que c'est JvPascalInterpreterReg.pas). Le programme d'installation ne plantait pas, mais ne m'installait pas pour autant les composants (peut être que je n'avais pas coché la bonne case...). Il m'a fallu compiler les paquets pour qu'il me signale l'erreur. Un petit tour sur le net, et c'était réglé.
Désolé, je m'aperçois qu'on sort un peu du topic...
Juré, je le referai plus

Simon
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
9 févr. 2012 à 14:44
c'est un vrai plaisir de te retrouver
bon courage


cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
9 févr. 2012 à 17:22
Le plaisir est partagé !

A bientôt !

Simon
0
tsainvet Messages postés 95 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 14 décembre 2017
12 mai 2012 à 21:58
bonjour vous .


le sujet m’intéresse je cherche de puis plusieurs heure et je trouve pas ce dont jai besoin et en lisant vos commentaire je me dit vous pourriez peut etre m'aidé?


je voudrais pouvoir ouvrir une form a une date précise.
je crée un petit programme de gestion de cave a vin ;-)

et j'aimerai que mon apli ,ouvre une Form ,une semaine avant la date apogée du vin saisie dans ma base de donnée .

je vais continué mes recherches , je repasserai sur ce topic le cas ou !!

en vous remerciant .
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
13 mai 2012 à 22:37
Bonsoir,

je voudrais pouvoir ouvrir une form a une date précise.

Tu peux créer une tâche windows, mais il faudra que ton micro reste allumé.
Bref, qu'il se comporte comme un serveur..

cantador
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
15 mai 2012 à 09:40
Bonjour,

Ou bien, si tu as un champ de type date, au démarrage de ton application et sur un timer tu boucle sur ce champ pour voir quels événements sont éligibles à l'affichage


Simon
0
tsainvet Messages postés 95 Date d'inscription samedi 27 mars 2004 Statut Membre Dernière intervention 14 décembre 2017
28 juin 2012 à 18:10
Merci pour vos réponse


voici ce que jai trouvé .


function DeltaDatetoJJMMAA(const CDate1, CDate2:TDate ) : TJJMMAA;
var
Date1 , Date2,WDate : TDate;
begin
if CompareDate(CDate1, CDate2) > 0 then begin
Date1 := CDate2;
Date2 := CDate1;
end
else begin
Date1 := CDate1;
Date2 := CDate2;
end;
with result do begin
AA := 0;
repeat
inc(AA);
WDate := Date1;
Date1 := incyear(Date1);
until comparedate(Date1, Date2) > 0;
dec(AA);
Date1 := WDate;
MM := 0;
repeat
inc(MM);
WDate := Date1;
Date1 := incmonth(Date1);
until comparedate(Date1, Date2) > 0;
dec(MM);
Date1 := WDate;
JJ := 0;
repeat
inc(JJ);
Date1 := incday(Date1);
until comparedate(Date1, Date2) > 0;
dec(JJ);
end;
end;

procedure TBDTH1.mniAlarmeApoge1Click(Sender: TObject);
var
texte : string;
Delta : TJJMMAA;
begin
Table1.Active:=True;
Table1.First;
Table1.last;
Delta := DeltaDatetoJJMMAA(DBdateEditAlarme.date, DateTimePicker1.date,);
texte := '0';
with Delta do
begin
if CompareDate(DateTimePicker1.date, DBdateEditAlarme.date ) > 0 then begin

form3.show;
Form4.Close;
sndPlaySound('c:\Ma Cave\musique\ALARM.WAV', SND_LOOP or SND_ASYNC );
end
else begin

sndPlaySound('stop', SND_ASYNC);
Form4.show;
// Form3.Close;
end

voila si ça peu etre utiles a d'autre

merci a tous !! ;-)
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
2 juil. 2012 à 11:40
Bonjour,
on ne comprend pas grand chose à ce que tu fais..

comment se fait l'automatisation de la procédure
si c'est sur un clic, ça ne sert à rien !

et aussi quelques truc bizarres comme :

Table1.Active:=True;
Table1.First; // dernier
Table1.last; // premier

Peut-être un locate voire un dblookup serait plus adapté.

En fait, ton souci comme beaucoup d'autres en informatique se situent
au niveau de l'analyse de la problématique..

Il faut d'abord faire
un schéma organisationnel des besoins et
se poser les bonnes questions

Une fois le sujet bien décortiqué, le code devient accessoire..

cdlt

cantador
0
Rejoignez-nous