[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.

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

Messagepar Momisas » 31 Jan 2019 18:32

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
Momisas
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 04 Sep 2017 13:00

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

Messagepar micmac » 31 Jan 2019 18:37

Bonjour et bienvenue sur le forum,
Dans votre signature il y a écrit: OpenOffice 4.1.3
Windows 10
Momisas a écrit:J'utilise OOo Base v4.1.5 sous Windows 10

Merci de mettre à jour votre signature.

Accès direct à votre signature

Cordialement.
Dans votre signature vous devez préciser la ou les versions exactes d'OpenOffice ou de LibreOffice et du ou des systèmes utilisés.
Exemple : AOO 4.1.6 (version imposée selon le cas) sous Win7 SP1, Win 8.1, Win 10, macOS 10.14.5, Ubuntu 18.10...
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
 
Message(s) : 5836
Inscrit le : 28 Août 2010 09:45

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

Messagepar tintin » 31 Jan 2019 18:43

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.6 / macOS 10.14.5 Mojave / Time Machine
Java 1.8.0_211 / Firefox / Safari / Thunderbird
Tutoriels du forum pour macOS
Pour préserver vos documents, faites régulièrement des sauvegardes.
Avatar de l’utilisateur
tintin
GourOOu
GourOOu
 
Message(s) : 6001
Inscrit le : 18 Juil 2008 16:29
Localisation : F-Oise + F-Savoie

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

Messagepar Dude » 01 Fév 2019 09:19

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
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20698
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

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

Messagepar jeanmimi » 01 Fév 2019 09:25

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 : Version: 6.2.4.2 (x64) (1 juin 2019)
Java (x64) 1.8.0_xxx, Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 14863
Inscrit le : 03 Mars 2006 17:02
Localisation : Venise verte

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

Messagepar Momisas » 01 Fév 2019 13:04

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
 
Message(s) : 11
Inscrit le : 04 Sep 2017 13:00

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

Messagepar Momisas » 01 Fév 2019 13:07


La modération 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
Momisas
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 04 Sep 2017 13:00

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

Messagepar Piaf » 01 Fév 2019 16:00

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   AgrandirRéduire
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
Piaf
GourOOu
GourOOu
 
Message(s) : 5618
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

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

Messagepar Momisas » 01 Fév 2019 16:05

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
Momisas
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 04 Sep 2017 13:00

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

Messagepar Piaf » 01 Fév 2019 18:57

Re
Un petit exemple
Exemple.png
Pour tester, Menu Outils > SQL... dans la fenêtre Instruction à exécuter tu colles
Code : Tout sélectionner   AgrandirRéduire
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é 278 fois
A+
Pièces jointes
Momisas.odb
(4.73 Kio) Téléchargé 12 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
 
Message(s) : 5618
Inscrit le : 25 Nov 2011 19:07
Localisation : Guyane

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

Messagepar Momisas » 02 Fév 2019 19:07

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
Momisas
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 04 Sep 2017 13:00

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

Messagepar jeanmimi » 02 Fév 2019 20:08

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 : Version: 6.2.4.2 (x64) (1 juin 2019)
Java (x64) 1.8.0_xxx, Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 14863
Inscrit le : 03 Mars 2006 17:02
Localisation : Venise verte

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

Messagepar Momisas » 03 Fév 2019 17:05

Merci Jeanmimi, je vais potasser la question
AOpenOffice 4.1.6
Windows 10
Momisas
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 11
Inscrit le : 04 Sep 2017 13:00


Retour vers Base de données

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 5 invité(s)