Evenement sur datetime [Résolu]

Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 25 janv. 2012 à 10:24 - Dernière réponse :
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 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
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
Messages postés
2684
Date d'inscription
jeudi 15 janvier 2004
Dernière intervention
26 juillet 2018
- 25 janv. 2012 à 18:29
3
Merci
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...

Merci Caribensila 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de Caribensila
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 26 janv. 2012 à 09:16
0
Merci
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
Commenter la réponse de sp40
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 2 févr. 2012 à 11:29
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 2 févr. 2012 à 11:38
0
Merci
bonjour Cantador,

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


Simon
Commenter la réponse de sp40
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 2 févr. 2012 à 12:41
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 6 févr. 2012 à 09:47
0
Merci
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
Commenter la réponse de sp40
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 6 févr. 2012 à 22:05
0
Merci
tu peux aussi utiliser un composant..
il doit y en avoir qui font ça dans la palette JEDI


cantador
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 7 févr. 2012 à 10:25
0
Merci
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
Commenter la réponse de sp40
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 8 févr. 2012 à 22:29
0
Merci
sur le nouveau joujou XE2.

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

cantador
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 9 févr. 2012 à 10:14
0
Merci
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
Commenter la réponse de sp40
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 9 févr. 2012 à 14:44
0
Merci
c'est un vrai plaisir de te retrouver
bon courage


cantador
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 9 févr. 2012 à 17:22
0
Merci
Le plaisir est partagé !

A bientôt !

Simon
Commenter la réponse de sp40
Messages postés
96
Date d'inscription
samedi 27 mars 2004
Dernière intervention
14 décembre 2017
- 12 mai 2012 à 21:58
0
Merci
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 .
Commenter la réponse de tsainvet
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 13 mai 2012 à 22:37
0
Merci
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
Commenter la réponse de cs_cantador
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
- 15 mai 2012 à 09:40
0
Merci
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
Commenter la réponse de sp40
Messages postés
96
Date d'inscription
samedi 27 mars 2004
Dernière intervention
14 décembre 2017
- 28 juin 2012 à 18:10
0
Merci
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 !! ;-)
Commenter la réponse de tsainvet
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 2 juil. 2012 à 11:40
0
Merci
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
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.