Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.
Modérateur :Vilains modOOs
Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
J'ai construit une base de données pour les membres de notre club, qui contient une table avec les données de chaque membre. J'ai fait une requête qui permet de calculer l'âge de chaque membre pour un jour précis - j'avais trouvé comment faire sur ce forum. Voici ma requête:
SELECT "nom", "prenom", "naissance",
CASE
WHEN Month('2009-04-01') < month("naissance") or ( Month('2009-04-01') = Month("naissance") and day('2009-04-01')<day("naissance") ) THEN
CAST((year('2009-04-01') - year("naissance") -1) AS VARCHAR) || ' ans'
ELSE
CAST((year('2009-04-01') - year("naissance") ) AS VARCHAR) || ' ans'
END as "age"
from "liste-membres"
Cette requête fonctionne bien, mais je dois changer la date de la formule à chaque nouvelle requête. J'ai besoin de calculer l'âge à chaque session, pour chaque examen ( 2 ou 3 examens aux 10 semaines environ), car les exigences de passage changent selon l'âge. Existe-t-il un moyen que je n'aurais pas à retaper la date 5 fois ?
Le résultat de la requête est imprimé sur des étiquettes qu'on colle sur les feuilles d'examen.
Merci de m'aider.
Dernière modification par Dans quelle étagère le 24 juil. 2009 13:15, modifié 3 fois.
Raison :Balisage ; La balise s'insère dans le premier message du fil
Bonjour et bienvenue dans ce forum,
Je ne sais pas si tu as recherché dans les exemples présents dans le forum, mais tu en as qui te montrent comment, comme dans l'exemple joint.
Tu peux aussi joindre ton fichier pour faciliter l'aide à t'apporter.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par jeanmimi le 04 avr. 2009 17:47, modifié 1 fois.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Il y aurait soit CURRENT_DATE, soit CURRENT_TIMESTAMP, ou éventuellement Now(), qui pourrait remplacer la chaine '2009-04-01', dans l'exemple, pour se référer toujours à "Aujourd'hui".
jeanmimi a écrit :Tu peux aussi joindre ton fichier pour faciliter l'aide à t'apporter.
Si ces idées ne conviennent pas, bien sur c'est la bonne démarche...
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ... Battons les escrocs à leur petit jeu
Le fichier joint par Jeanmimi ressemble beaucoup à la base que j'ai utilisée à l'automne pour construire ma propre base. La requête age (la première) est celle que j'utilisais au début pour calculer l'âge des membres. Puis je l'ai modifée pour me faciliter la vie.
Ce que je dois faire, c'est obtenir l'âge des membres à des dates fixes. Par exemple, cette semaine, c'est la période d'inscription du club. Après, je dois fournir à la commission régionale une liste des membres actifs avec leur âge au 1 janvier 2009. Je dois faire la même liste pour l'association nationale avec l'âge des membres au 1 septembre 2008. Lors de la session d'examens, je dois fournir l'âge des membres le jour de l'examen (qui n'est pas toujours la date à laquelle je prépare les copies des examens). Ainsi, dans la formule de requête, je change CURRENT_DATE pour insérer plutôt la date à laquelle j'ai besoin de l'âge.
Ce que j'aimerais obtenir, c'est une façon de demander à la requête "donne-moi l'âge le 1 janvier 2009" ou "donne-moi l'âge le 1 septembre 2008" sans avoir à remplacer le CURRENT_DATE de la formule 5 fois avec la bonne date. Les premières fois, on a essayé en changeant la date de l'ordinateur avant de de lancer la requête, mais Windows ne semble pas apprécié ça, on a eu des problèmes.
René-Pierre a écrit :Ce que j'aimerais obtenir, c'est une façon de demander à la requête "donne-moi l'âge le 1 janvier 2009" ou "donne-moi l'âge le 1 septembre 2008" sans avoir à remplacer le CURRENT_DATE de la formule 5 fois avec la bonne date.
Le plus simple me semble être de créer une table spécifique (un champ clé primaire en auto-valeur et un champ date). Il suffira de saisir la date dans cette table.
Ensuite on ajoute cette table à la requête et on a deux possibilités :
- soit on ajoute la liaison sur entre les champs date
- soit ne relie pas les tables mais on utilise comme critère de sélection :
Une panne de courant est survenue alors que je transmettais mon fichier hier soir, je vois que rien n'a passé. Mon fichier a été corrompu et je dois le refaire, alors voici une ébauche de ma base. Une fois le fichier refait - j'en a besoin pour les inscriptions ce soir - j'essairai les dernières suggestions.
Merci
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
J'ai cherché à appliquer les suggestions de Pierre-Yves, mais j'ai mal dû m'y prendre car je n'arrive pas à mieux que ce que j'avais testé auparavant.
Pourtant, la solution ne doit pas être très loin.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
SELECT "nom", "prenom", "tel", "ID-membre", "telcode", "naissance", 'aura' as " " , "date" as "le",
CASE
WHEN Month("date") < month("naissance") or ( Month("date") = Month("naissance") and day("date")<day("naissance") ) THEN
CAST((year("date") - year("naissance") -1) AS VARCHAR) || ' ans'
ELSE
CAST((year("date") - year("naissance") ) AS VARCHAR) || ' ans'
END as "age"
from "membres", "date"
Rappel : avec cette solution on n'utilise plus de paramètre. Ce dernier est saisi dans la table...
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
j'ai essayé la solution de Pierre-Yves et tout fonctionne bien. Ce soir, après les inscriptions, mon fichier était à jour, alors j'ai essayé avec la liste des 250 membres, mes 2 rapports sont prèts à être signés et postés. C'est tellement plus rapide !