Page 1 sur 1

[Résolu]Différences de deux dates

MessagePublié: 25 Août 2007 21:06
par celine2512
Bonjour,

j'ai regardé tous les messages sur ce sujet, mais rien n'y fait :( je ne comprends pas ou les exemples ne correspondent pas.:oops:

En effet je souhaite faire la différence entre deux dates de la forme (dd/mm/yyyy) et obtenir un résulat date sous la forme (dd/mm/yy)
Il faut faire une requête SQL avec DAteDIff mais impossible d'obtenir le résultat sous la forme demandée.
Quel calcul pourrais je faire ??

Merci beaucoup

Re: Différences de deux dates

MessagePublié: 26 Août 2007 11:50
par Pierre-Yves Samyn
Bonjour

celine2512 a écrit:j'ai regardé tous les messages sur ce sujet, mais ...les exemples ne correspondent pas...


Je ne partage pas tout à fait ce point de vue car d'autres fils ont abordé la question.

Celui-ci où je montre comment calculer le nombre d'années en tenant compte de la date anniversaire.

Ou encore Celui-ci
dans lequel j'indique la fonction, la documentation...
et où je renonce faute de temps et d'enthousiasme... :)

Il faut dire que ceci prend un certain temps à rédiger :

Code : Tout sélectionner   AgrandirRéduire
SELECT "DateNaissance", "Nom", YEAR(now())-YEAR("DateNaissance")-

case
   when (             MONTH( NOW() ) < MONTH("DateNaissance")                       OR            (        MONTH( NOW() ) = MONTH("DateNaissance") AND DAY( NOW() ) < DAY ("DateNaissance")     )                   )
   then 1
   else    0
end as "ans",

MONTH(NOW())-MONTH("DateNaissance") +

case
   when MONTH(now()) <= MONTH("DateNaissance") AND day(now()) < day("DateNaissance")
   then 11
   else
         case
         when MONTH(now()) < MONTH("DateNaissance") AND day(now()) >= day("DateNaissance")
         then 12
         else
               case
               when MONTH(now()) > MONTH("DateNaissance") AND day(now()) < day("DateNaissance")
               then -1
               else 0
               end
         end
end as "mois",

datediff('DAY',
cast(
year(now()) || '-' || month(now()) -

case
   when day(now()) < day("DateNaissance")
   then 1
   else 0
end || '-' || day("DateNaissance")

as DATE) , now() )

as "jours"

FROM "Table1"




Alors voila un exemple tout fait...

http://user.services.openoffice.org/fr/ci-joint/fichier/2007/08/26-124837.odb

MessagePublié: 26 Août 2007 19:49
par celine2512
Merci beaucoup c'est tout a fait ca !

J'ai une table Administrés et dans cette table je fais donc la soustraction des dates qui marchent maintenant tres bien. Par contre je voudrais que le résultat de cette requete soit liée dans le formulaire Administré et qu'il concerne uniquement l'administré en cours. (et non comme actuellement tous les administrés de la table)

http://user.services.openoffice.org/fr/ci-joint/fichier/2007/08/26-084139.odb

Ci joint ma BDD

La requete se nomme : Req_DureeServiceMil elle calcule la différence entre les champs date DateDebutServiceMilitaire et DateFInServiceMilitaire

J'ai essaye de l'associé dans le formulaire Administres en créant un sous formulaire mais impossible de faire un tri sur la requete pour afficher le résultat pour l'administré en cours.

OU sinon comment lier le résultat à un champ de la table Administré (ici, ca serait DureeServgiceMilitaire)

Désolée de demander tant de conseils !

Merci encore si vous pouvez jeter un coup d'oeil

MessagePublié: 27 Août 2007 09:35
par Pierre-Yves Samyn
Bonjour

Je n'ai regardé que ta table Administre... (rapidement )

Puisque tu souhaites quelques conseils je me permets ces quelques remarques préliminaires :

  • Un premier réflexe pour ce genre de projets devrait être : est-ce qu'une application similaire n'existe pas déjà (autre collectivité, autre administration) ?
  • L'utilisation du numéro de sécurité sociale est soumis à des règles strictes (CNIL)
  • Ne pas stocker dans la base des résultats de calcul (sauf cas particuliers...). Puisqu'on peut "calculer" à quoi bon enregistrer ?
  • Tu ne prévois qu'un seul "Tel", s'il s'agit du numéro "perso" ?
  • Les informations relatives au service militaire ne concernent (a priori...) que les hommes et pourraient donc être dans une table liée.


Ceci me semble un projet conséquent, évidemment professionnel, et je n'ai pas le recul suffisant pour être certain que HSQL soit adapté.

Bon... trève de litote : je pense que HSQL n'est pas adapté :)

Pour répondre maintenant plus précisément à la question :

L'exemple joint comprend un formulaire simplifié mettant en liaison la table Administre et une Vue_SM (euh... service militaire...:D) via un sous-formulaire.

Je n'ai pas mis de contrôle "Table" dans la mesure où je pense qu'il n'y a pas plusieurs lignes par administré.

J'utilise une vue car avec une requête le lien ne s'actualise pas lors du changement d'enregistrement.

Avec ce système, pas nécessaire d'utiliser un filtre, ni un paramètre dans la requête (par parenthèse ce type de requête nécessite une exécution SQL directe empêchant la saisie de paramètre).

Tout ceci encore une fois pour mettre en liaison le résultat "calculé" avec le numéro de sécu. Si tu veux quand même enregistrer dans la base, il faudra t'orienter vers des requêtes de mise à jour ou une macro.

Voir ici pour des exemples de requêtes

http://user.services.openoffice.org/fr/ci-joint/fichier/2007/08/27-103354.odb

MessagePublié: 27 Août 2007 12:05
par celine2512
Super merci j'ai étudié votre exemple et je vais m'en inspirer. Merci également pour les conseils :)

Une petite question encore je n'ai pas compris comment d'une requête SQL avez vous pu créer la vue_SM dont vous parlez ?

MessagePublié: 27 Août 2007 12:08
par celine2512
celine2512 a écrit:Super merci j'ai étudié votre exemple et je vais m'en inspirer. Merci également pour les conseils :)

Une petite question encore je n'ai pas compris comment d'une requête SQL avez vous pu créer la vue_SM dont vous parlez ?


Ok je viens de voir clic droit sur le requete créer une vue :)

MessagePublié: 27 Août 2007 18:01
par Pierre-Yves Samyn
celine2512 a écrit:clic droit sur le requete créer une vue

Oui, ou si on souhaite apporter des modifications :
  • Clic droit sur la requête
  • Editer en mode SQL
  • Sélectionner puis copier le texte
  • Fermer
  • Afficher les tables, cliquer sur Créer une vue
  • Cliquer sur fermer (on n'ajoute pas les tables via cet outil)
  • Désactiver le mode Ebauche en cliquant sur l'équerre dans la barre d'outils
  • Coller le texte

MessagePublié: 04 Sep 2007 20:42
par Philippe BRONCHART
Bonsoir céline,

je pense être dans la même "partie" que toi.

Sincèrement en matière d'administration de ce type de personnel, tu vas devenir folle avec base.

Une base, c'est pratique pour saisir,organiser, trier, extraire des données ... Mais alors pour calculer ... ( si je te parle de date rectifiée tu vas comprendre)

Sincèrement je rejoins Pierre-Yves. Ingérable ton histoire ... sauf avec un tableur.

J'ai des tas "d'appliquettes" dans ce domaine, essentiellement sous calc. Si je peux aider ...

MessagePublié: 05 Sep 2007 13:02
par celine2512
Philippe BRONCHART a écrit:Bonsoir céline,

je pense être dans la même "partie" que toi.

Sincèrement en matière d'administration de ce type de personnel, tu vas devenir folle avec base.

Une base, c'est pratique pour saisir,organiser, trier, extraire des données ... Mais alors pour calculer ... ( si je te parle de date rectifiée tu vas comprendre)

Sincèrement je rejoins Pierre-Yves. Ingérable ton histoire ... sauf avec un tableur.

J'ai des tas "d'appliquettes" dans ce domaine, essentiellement sous calc. Si je peux aider ...


Merci pour ta remarque, en fait je suis totalement novice dans open office et c'est vrai que c est un projet qui n'est à la base pas trop compatible avec la base Open Office mais on m'a demandé de le réaliser comme ceci. Donc je m'efforce d'essayer de trouver des solutions. et n'y connaissant rien en Macros c'est pas simple :)

Bon courage à toi aussi :)