Page 1 sur 1

Re: [R] date remplacée dans un contrôle GUICtrlCreateDate

Posté : ven. 07 févr. 2020 17:16
par GMH
Bonjour,

Lorsque je souhaite modifier un enregistrement de ma base de données SQLite, la date ancienne enregistrée dans un champ de cette bdd ne s'affiche pas dans le contrôle GUICtrlCreateDate du formulaire destiné à modifier cet enregistrement. Elle est systématiquement remplacée par la date du jour de la modification. Ainsi un enregistrement daté du 01/01/2020 est remplacé dans le contrôle GUICtrlCreateDate par la date d'aujourd'hui 07/02/2020.

Y a-t-il un moyen de forcer le formulaire à réafficher non pas la date du jour de la modification, mais celle enregistrée dans la base de données ?

Je vous remercie de votre réponse.

Re: [..] date remplacée dans un contrôle GUICtrlCreateDate

Posté : ven. 07 févr. 2020 19:58
par mikell
Est-ce que la date envoyée au controle GUICtrlCreateDate est bien au format "yyyy/mm/dd" ?
Si le controle ne "comprend" pas ce qu'on lui envoie, il affiche par défaut la date d'aujourd'hui

Re: [..] date remplacée dans un contrôle GUICtrlCreateDate

Posté : ven. 07 févr. 2020 20:39
par GMH
Bonsoir et merci pour votre réponse,

Voici ma création de contrôle :
$inputDate = GUICtrlCreateDate("",1240,90,250,20)
Global $sStyle = "yyyy/mm/dd"
GUICtrlSendMsg($inputDate, $DTM_SETFORMATW, 0, $sStyle)
Je souhaite en effet l'ordre Année/Mois/Jour plutôt que l'ordre par défaut (dd/mm/yyyy).

Re: [..] date remplacée dans un contrôle GUICtrlCreateDate

Posté : ven. 07 févr. 2020 21:15
par mikell
Le GUICtrlSendMsg est inutile ici puisque ce $sStyle est déjà le style par défaut du controle. Je parle du format des données envoyées au controle

GUICreate("test", 200, 200, 800, 200)
; affiche la date d'aujourd'hui
$date = GUICtrlCreateDate("test", 10, 10, 185, 20)
GUISetState(@SW_SHOW)

Msgbox(0,"1", "suivant")
; ça marche pas :
GuiCtrlSetData($date, "25/12/2019")
Msgbox(0,"2", "suivant")
; ça marche :
GuiCtrlSetData($date, "2019/12/25")
Sleep(2000)

Re: [..] date remplacée dans un contrôle GUICtrlCreateDate

Posté : sam. 08 févr. 2020 10:48
par GMH
Je vous remercie pour votre code. Je l'ai testé. Le "2019/12/25" s'affiche Mercredi 25 décembre 2020 dans le formulaire, et non 2019/12/25

Les 2 choix suivants n'affichent pas la date enregistrée dans le formulaire. Ils affichent la date d'aujourd'hui (sous le format : 08/02/2020 (alors que je l'ai enregistrée sous le format yyyy/MM/dd) pour le premier , et "Samedi 08 février 2020" pour le second).

Choix 1 : $inputDate = GUICtrlCreateDate("",1240,90,250,20,$DTS_SHORTDATEFORMAT)
Choix 2 : $inputDate = GUICtrlCreateDate("",1240,90,250,20)

Re: [..] date remplacée dans un contrôle GUICtrlCreateDate

Posté : sam. 08 févr. 2020 12:50
par TommyDDR
J'ai testé le code de mikell et il fonctionne bien.
test.png
test.png (2.57 Kio) Vu 337 fois
test.png
test.png (2.57 Kio) Vu 337 fois
Testez le code PURE de mikell, sans vouloir l'implémenter dans le votre, si cela ne marche pas... (en fait ce n'est pas possible, ça devrait marcher).

Et comme il a déjà beaucoup trop été dit sur ce forum : merci d'envoyer un code sans erreur de compilation qui puisse reproduire votre problème.

Re: [R] date remplacée dans un contrôle GUICtrlCreateDate

Posté : sam. 08 févr. 2020 13:31
par GMH
Je vous assure que le code de Mikel testé tel quel, sans ajout ni retrait, affiche "mercredi 25 décembre 2019" plutôt que "2019/12/25". Je ne l'ai pas inclus dans mon propre code pour le tester. Et chez vous, vous obtenez la même chose : c'est bien ce qui apparaît dans votre copie d'écran ci-dessus.

Après bien des tentatives, j'ai rajouté le code :
$inputDate = GUICtrlCreateDate("",1240,90,250,20)
Global $sStyle = "yyyy/MM/dd"
GUICtrlSendMsg($inputDate, $DTM_SETFORMATW, 0, $sStyle)
Et maintenant, tout fonctionne bien :
1. c'est bien la date enregistrée dans la base SQLite qui s'affiche
2. l'affichage est bien sous le format yyyy/DD/dd

Je n'ai pas tout compris. Mais à force d'ajouts ou de suppressions dans mon code, j'ai obtenu le bon affichage... Je ne touche plus à rien !

Merci à tous deux pour vos messages.

Re: [..] date remplacée dans un contrôle GUICtrlCreateDate

Posté : sam. 08 févr. 2020 16:48
par jchd
Je vois une incompréhension ici.

A) Dans une BdD il est hautement recommandé de stocker les dates sous une forme triable, soit Julian day, Julian date, Unix epoch, texte (YYYY-MM-DD). Les fonctions de date de SQLite comprennent tous ces formats et bien plus, mais pas YYYY/MM/DD et il est bien pratique de pouvoir faire
select * from mytable where mydate between '2019-10-01' and '2019-10-31'
ou
select * from mytable where mydate between date('now', '-1 month', '+1 week', 'weekday 3') and date('now')
(entre le second mercredi du mois dernier et aujourd'hui)

B) Un contrôle Date de Windows accepte en entrée et entre autres les formats YYYY-MM-DD ou YYYY/MM/DD, indifféremment, le tout sous locale Fr-Fr par défaut.

C) Le format d'affichage des dates dans un contrôle Date Windows n'a rien à voir avec A) et B) : il répond au style du contrôle. Par exemple : $DTS_SHORTDATEFORMAT affiche 08/02/2020
alors que le défaut (sous locale Fr-Fr par défaut)
$DTS_LONGDATEFORMAT (style par défaut) affiche samedi 08 février 2020

Il est facile de changer le format de date régional (changement de locale), sos W10 :
Paramètres
Heure et Langue
Mise en forme de la date, de l'heure et région
Modifier les formats de données
Date courte 05/04/2017 -> 2017-05-04

Avec ce dernier réglage en place, le code suivant fait ce qu'on lui demande :

Code : Tout sélectionner

GUICreate("test", 200, 200, 800, 200)
; affiche la date d'aujourd'hui
$date = GUICtrlCreateDate("test", 10, 10, 185, 20, $DTS_SHORTDATEFORMAT)
GUISetState(@SW_SHOW)

Msgbox(0,"1", "suivant")
; ça marche :
GuiCtrlSetData($date, "2019/12/25")
Msgbox(0,"2", "suivant")
; ça marche aussi :
GuiCtrlSetData($date, "2019-12-25")
Sleep(2000)
EDIT : on peut aussi procéder comme l'édit précédent, mais ça sera au coup par coup, tandis que la modification des paramètre d'affichage Windows est permanente.

Re: [..] date remplacée dans un contrôle GUICtrlCreateDate

Posté : sam. 08 févr. 2020 19:59
par mikell
jchd a écrit :
sam. 08 févr. 2020 16:48
Je vois une incompréhension ici.
On dirait bien :mrgreen:
Quoique si on s'en tient strictement au titre du sujet et au contenu du post #1 , mes réponses n'étaient pas si inappropriées que ça ...

Re: Re: [R] date remplacée dans un contrôle GUICtrlCreateDate

Posté : sam. 08 févr. 2020 20:44
par jchd
Je ne pensais pas à toi ;-)

Re: Re: [R] date remplacée dans un contrôle GUICtrlCreateDate

Posté : dim. 09 févr. 2020 09:11
par GMH
Aucune réponse n'est "inappropriée". Tous les messages font avancer vers la solution. Je vous remercie tous.

Concernant le changement du format de date régional dans windows, l'inconvénient me semble que l'on va imposer ce format dans tous les logiciels faisant appel aux dates. Ce qui n'est pas forcément souhaité.

Encore merci.

Re: Re: [R] date remplacée dans un contrôle GUICtrlCreateDate

Posté : dim. 09 févr. 2020 19:26
par GMH
RECTIFICATION de MON MESSAGE PRÉCÉDENT :

Une inattention m'a conduit à écrire "appropriée" au lieu d' "inappropriée" dans le message précédent, inversant ainsi ma pensée. J'espère que tous avez compris qu'il s'agissait d'un lapsus.

Re: [..] date remplacée dans un contrôle GUICtrlCreateDate

Posté : dim. 09 févr. 2020 19:54
par mikell
jchd a écrit :
sam. 08 févr. 2020 16:48
Un contrôle Date de Windows accepte en entrée et entre autres les formats YYYY-MM-DD ou YYYY/MM/DD
Intéressant... et ce n'est PAS mentionné dans le fichier d'aide !! :twisted:
"The preselected date (always as "yyyy/mm/dd")."

Re: Re: [R] date remplacée dans un contrôle GUICtrlCreateDate

Posté : lun. 10 févr. 2020 12:01
par jchd
C'est ce que j'ai constaté sur mon W10. J'ignore si c'est pareil pour les versions antérieures.

Re: [R] date remplacée dans un contrôle GUICtrlCreateDate

Posté : lun. 10 févr. 2020 21:19
par mikell
Si ça marche sur mon vieux XP et sur ton W10 , aucune raison pour que ça ne marche pas aussi pour les versions intermédiaires
Et si c'est bien le cas, ça mériterait une rectification du fichier d'aide - entre autres pour la compatibilité avec SQlite que tu mentionnes

Re: Re: [R] date remplacée dans un contrôle GUICtrlCreateDate

Posté : mar. 11 févr. 2020 06:02
par jchd
Note ça dans le Trac si tu peux, je n'ai plus d'accès aux fichiers d'aide (tout paumé) et guère de temps actuellement.