[Résolu] Placer résultat de calcul dans un champ de table

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.
Momisas
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 04 sept. 2017 14:00

[Résolu] Placer résultat de calcul dans un champ de table

Message par Momisas »

Bonjour,
J'utilise OOo Base v4.1.5 sous Windows 10
J'avance doucement dans la réalisation d'un projet sous Base qui permettra le plus simplement possible d'établir un classement de sportifs inscrits à une compétition.
Actuellement j'utilise Calc. Mais je trouve le fonctionnement trop lourd, en particulier pour éditer les résultats.
Une table "Partants" contient nom, prénom, date de naissance, ... est constituée à partir d'une feuille Excel contenant les informations saisies dans un formulaire d'inscription en ligne.
Je souhaite incorporer dans la table "Partants" l'âge déterminé, le jour de l'épreuve, à partir de la date de naissance. Cette donnée doit me permettre ensuite d'attribuer un bonus temps en fonction de l'âge.
Le calcul de l'âge ne me pose pas de problème à partir d'une requête : 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 "Age" FROM "Partants"
cependant je n'arrive pas à charger "Age" dans la table "Partants"
De la même façon j'aurai ensuite à calculer le temps compensé (temps relevé - bonus lié à l'âge) et le placer dans la table "Partants"
Si quelqu'un peut m'aider, je l'en remercie par avance.
AOpenOffice 4.1.6
Windows 10
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9222
Inscription : 28 août 2010 10:45

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par micmac »

Bonjour et bienvenue sur le forum,
Dans votre signature il y a écrit : OpenOffice 4.1.3
Windows 10
[b][color=#404080]Momisas[/color][/b] a écrit :J'utilise OOo Base v4.1.5 sous Windows 10
Merci de mettre à jour votre signature.

Accès direct à votre signature

Cordialement.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
tintin
GourOOu
GourOOu
Messages : 9339
Inscription : 18 juil. 2008 17:29
Localisation : F-Oise + F-Savoie

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par tintin »

Bonjour,

En joignant votre fichier dépersonnalisé ou un exemple de fichier au format ODF, vous facilitez la tâche des personnes qui vont vous aider.
Comment joindre un fichier
Comment dépersonnaliser un document

Cordialement
AOO 4.1.15 et LibO stable 7.6.5 / macOS Intel 13.6.5 Ventura
Adoptium-temurinJDK-jre_1.8.0_402 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25142
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par Dude »

De toute façon, on ne stocke pas de champ calculé dans une table.
Au pis, on crée une vue qui permet de connecter le formulaire ou le rapport dessus.
Momisas a écrit :Je souhaite incorporer dans la table "Partants" l'âge déterminé, le jour de l'épreuve
De mon avis : le modèle relationnel est faux.
Un partant peut participer à plusieurs épreuves.
Il faudrait donc créer une table "Epreuve" qui stocke cette information.
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par jeanmimi »

Bonjour,
Momisas a écrit :De la même façon j'aurai ensuite à calculer le temps compensé (temps relevé - bonus lié à l'âge) et le placer dans la table "Partants"
Avec Base, ce type de renseignement est soit dans une requête, soit dans une Vue, soit dans un Rapport.
Une Table ne devrait contenir que les éléments qui sont fixes (identité, date de naissance), ou qui changent rarement (ex adresse) puisqu'une Table de Base de données n'est pas une feuille de Tableur.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Momisas
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 04 sept. 2017 14:00

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par Momisas »

Bonjour Dude
Merci pour la réponse
Ok effectivement je peux créer une table "Epreuve" mais comment charger dans cette table "Age" (calculé à partir de la date de naissance qui se trouve dans "Partants")
Et si je comprends bien, je vais devoir créer une table "Chrono" pour charger le temps calculé à partir des données chrono saisies au moment de l'épreuve et du bonus déterminé à partir de "Age"
AOpenOffice 4.1.6
Windows 10
Momisas
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 04 sept. 2017 14:00

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par Momisas »


La modération vous a écrit: :alerte: Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.

En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.

Bonjour Jeanmimi,
Merci pour la réponse
Est-ce que ça veut dire que je ne peux pas mémoriser un champ résultat d'un calcul ?
AOpenOffice 4.1.6
Windows 10
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par Piaf »

Bonjour
Momisas a écrit :Est-ce que ça veut dire que je ne peux pas mémoriser un champ résultat d'un calcul ?
Non, c'est possible avec une instruction UPDATE de l'outil SQL.
Quelque chose du genre

Code : Tout sélectionner

UPDATE "tConcurrentsEpreuve" 
SET "AgeEpreuve" = (SELECT CASEWHEN( MONTH( '1999-12-02' ) < MONTH( "DateNaiss" ), CAST( ( YEAR( '1999-12-02' ) - YEAR( "DateNaiss" ) - 1 ) AS "INT" ), CASEWHEN( MONTH( '1999-12-02' ) > MONTH( "DateNaiss" ), CAST( ( YEAR( '1999-12-02' ) - YEAR( "DateNaiss" ) ) AS "INT" ), CASEWHEN( DAY( '1999-12-02' ) >= DAY( "DateNaiss" ), CAST( ( YEAR( '1999-12-02' ) - YEAR( "DateNaiss" ) ) AS "INT" ), CAST( ( YEAR( '1999-12-02' ) - YEAR( "DateNaiss" ) - 1 ) AS "INT" ) ) ) ) "AgeEpreuve" FROM "tConcurrentsEpreuve", "tadherents" WHERE "tConcurrentsEpreuve"."refConcurent" = "tadherents"."IdAd")
La date en dur, est la date de l'épreuve.
Mais sans savoir comment sont organisées tes données, difficile de te répondre plus précisément.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Momisas
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 04 sept. 2017 14:00

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par Momisas »

Bonjour et merci Piaf
Ouf ! Pas simple
je crois que je ne suis pas prêt pour utiliser correctement SQL
je vais devoir bosser dur
AOpenOffice 4.1.6
Windows 10
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par Piaf »

Re
Un petit exemple
Exemple.png
Pour tester, Menu Outils > SQL... dans la fenêtre Instruction à exécuter tu colles

Code : Tout sélectionner

UPDATE "tEpreuveConcurrent" 
SET "AgeEpreuve" = (SELECT CASEWHEN( MONTH( '1999-12-02' ) < MONTH( "dteNaiss" ), CAST( ( YEAR( '1999-12-02' ) - YEAR( "dteNaiss" ) - 1 ) AS "INT" ), CASEWHEN( MONTH( '1999-12-02' ) > MONTH( "dteNaiss" ), CAST( ( YEAR( '1999-12-02' ) - YEAR( "dteNaiss" ) ) AS "INT" ), CASEWHEN( DAY( '1999-12-02' ) >= DAY( "dteNaiss" ), CAST( ( YEAR( '1999-12-02' ) - YEAR( "dteNaiss" ) ) AS "INT" ), CAST( ( YEAR( '1999-12-02' ) - YEAR( "dteNaiss" ) - 1 ) AS "INT" ) ) ) ) FROM "tConcurrents" WHERE "tEpreuveConcurrent"."refConcurrent" = "tConcurrents"."IdConcurrent")
puis tu cliques sur Exécuter.
Resultat.png
Resultat.png (22.41 Kio) Consulté 2595 fois
A+
Pièces jointes
Momisas.odb
(4.73 Kio) Téléchargé 132 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Momisas
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 04 sept. 2017 14:00

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par Momisas »

A Monsieur le modérateur je souhaiterais dire:
1- mes 2 réponses du 1/2 à Dude et Jeanmimi ont été faites pour les remercier de m'avoir répondu. Effectivement j'aurais dû répondre aux 2 dans le même message.
2- je sais parfaitement que pour recevoir il faut savoir donner, mais dans le cas présent je découvre Base et Sql et je suis bien incapable, pour l'instant, de proposer des solutions à qui que ce soit.

A Piaf
Mille mercis pour l'exemple que je vais m'empresser de consulter.

2 petites questions : existe-t-il une documentation Sql pour AOO (avec toutes les commandes utilisables) ?
Quelle est la commande Sql pour AOO équivalente à TIME_TO_SEC () et SEC_TO_TIME () par exemple ?

Par avance merci et désolé pour le dérangement.

PS: j'ai été programmeur système sur Univac 1108 et 1180 pendant de nombreuses années. J'utilisais l'assembleur Sleuth, le Fortran, Cobol, Perl, Basic, HTML, ... mais franchement je comprends difficilement la logique du SQL que l'on doit utiliser avec AOO Base
AOpenOffice 4.1.6
Windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par jeanmimi »

Momisas a écrit :existe-t-il une documentation Sql pour AOO (avec toutes les commandes utilisables
Oui, la traduction française du guide HSQLDB est ici :
https://wiki.openoffice.org/wiki/FR/Doc ... h09#SELECT
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Momisas
NOOuvel adepte
NOOuvel adepte
Messages : 11
Inscription : 04 sept. 2017 14:00

Re: Placer le résultat d'un calcul dans un champ d'une table

Message par Momisas »

Merci Jeanmimi, je vais potasser la question
AOpenOffice 4.1.6
Windows 10
Verrouillé