Questions de débutant... - SQL/NoSQL - Programmation
Marsh Posté le 24-08-2007 à 12:03:09
Access ayant un système de création d'interface graphique/de formulaire, il est surement capable de faire des choses plus compliqué que de simples requêtes. Je ne connais pas cette partie là alors je vais juste te parler de la partie base de donnée/stockage des données
Sam Dalembert a écrit : - comment faire pour qu'une valeur soit directement mise dans la colonne, en fonction des valeurs d''autres colonnes (dans la même table). Je sais pas si c'est clair, par exemple comment faire pour qu'une colonne "victoires/défaites" se remplisse automatiquement en fonction des colonnes "score de l'équipe" et "score de l'adversaire" ? |
Au niveau base de donnée, c'est impossible. S'il y a une solution, ça sera au niveau de la validation des formulaires afin de créer une requête qui modifiera les données induites. L'autre solution serait de faire une requête qui lira les données inséré dans la base afin de mettre à jour les compteurs de victoires et défaites (à condition d'avoir stocké les résultats de chaque match)
Sam Dalembert a écrit : - comment faire pour que l'ordre croissant suivant la date soit respecté (et donc qu'il y ait message d'erreur), c'est-à-dire 1 : 11/03/2004, 2 : 15/03/2004, 3 : 17/03/2004 4 : 12/03/2004 le N°4 est faux. Comment faire pour qu'Access le consdère comme non valide ? |
Si t'as une table des match alors il te suffit de mettre un "order by" dans ta requête ou plus simplement d'indiquer le tri dans l'interface d'access. Si t'as stocké les dates de matchs dans ta table d'équipe alors t'as fait une grosse gaffe. Si t'as prévus 6 colonnes de date, qu'est ce que tu feras pour le 7éme match? Si la date change, comment le système saura dans quel ordre stocker les dates? En plus de ça, si tu stockes les dates dans la table des équipes, tu devras saisir les dates deux fois (une fois par équipe qui joue) en espérant ne pas te planter en les saisissant (un match ou les équipent ne se présentent pas le même jour sur le terrain ne sera pas très intéressant)
En bref, si t'as stocké les dates dans la table des équipes tu as fait une erreur vu qu'il faut les mettre dans une table des matchs, table qui est censé contenir au minimum la date, l'identifiant des deux équipes et le résultat (en nombre de point marqué) de chaque équipe (possibilité de rajouter le lieu de la rencontre (son identifiant si possible) et d'autres éléments propre au match).
Sam Dalembert a écrit : - comment faire pour que la valeur d'une colonne soit automatiquement la somme de 2 valeurs de 2 autres colonnes (tout dans la même table), à chaque fois tout pour la même ligne évidemment. Par exemple comment faire pour que la colonne "nombre de fruits" soit la somme des colonnes "nombre de pommes" et "nombre de poires" (je sais mes exemples sont ridicules mais bon au moins je suis sûr de me faire comprendre) |
Pourquoi stocker le total des deux colonnes? N'est il pas plus simple de demander la somme des deux colonnes quand tu as besoin de cette donnée? (un simple "pommes + poires" est suffisant pour avoir le total)
Sam Dalembert a écrit : - est-il possible d'avoir une colonne qui calcule un pourcentage à partir d'une seule et même colonne avec une info du type 2/5 (et donc que ça calcule 40% directement)? ou faut-il obligatoirement une colonne pour le 2, une colonne pour le 5 ? |
Même réponse que juste au dessus. Pourquoi stocker le résultat d'une opération mathématique simple qui porte sur les valeurs contenu dans une seule table? Il est tellement facile et rapide de calculer ces valeurs quand on en a besoin que ça ne sert à rien de les avoir en dur avec en plus le risque qu'elles ne soient pas à jour pour des raisons X ou Y.
Sam Dalembert a écrit : Merci. |
De rien.
Marsh Posté le 24-08-2007 à 13:03:52
un grand principe d'une BD : ne jamais stocker des infos qui peuvent être recalculées (et comme tout principe, y'a des exceptions, par ex, pour des questions de perfs).
Autre remarque : j'espère que tes dates sont stockées au format AAAA-MM-JJ ou en timestamp sinon, t'es pas dans la merde pour trier tes dates...
Petit conseil : vas lire de la doc à propos de MCD (modèle conceptuel de données) afin de ne pas créer un modèle de BD foireux
Marsh Posté le 24-08-2007 à 17:24:59
Déjà merci pour ta réponse.
omega2 a écrit : Au niveau base de donnée, c'est impossible. S'il y a une solution, ça sera au niveau de la validation des formulaires afin de créer une requête qui modifiera les données induites. L'autre solution serait de faire une requête qui lira les données inséré dans la base afin de mettre à jour les compteurs de victoires et défaites (à condition d'avoir stocké les résultats de chaque match) |
On peut faire une requête pour forcer la valeur de la colonne alors ? Avec du SQL ? Si c'est pas trop compliqué et long tu pourrais me montrer ?
omega2 a écrit : Si t'as une table des match alors il te suffit de mettre un "order by" dans ta requête ou plus simplement d'indiquer le tri dans l'interface d'access. Si t'as stocké les dates de matchs dans ta table d'équipe alors t'as fait une grosse gaffe. Si t'as prévus 6 colonnes de date, qu'est ce que tu feras pour le 7éme match? Si la date change, comment le système saura dans quel ordre stocker les dates? En plus de ça, si tu stockes les dates dans la table des équipes, tu devras saisir les dates deux fois (une fois par équipe qui joue) en espérant ne pas te planter en les saisissant (un match ou les équipent ne se présentent pas le même jour sur le terrain ne sera pas très intéressant) |
J'ai fait une table matches, où il y a un ID de match (en numéro auto), la date, l'adversaire, si c'était à domicile ou à l'extérieur, le score de l'équipe, le score de l'équpe adverse, et le résultat en clair (victoire ou défaite). Et j'ai fait une autre table avec un ID correspondant à chaque équipe.
Sinon pour le tri, ça aide à voir quelles données sont fausses mais ça me le fait pas automatiquement. Avec "order by" ça le ferait automatiquement ? Faut aller dans la table mode création et "valide si" ? Si oui il faut marquer quoi ?
Au pire le tri c'est déjà ça ça permet de voir merci pour l'astuce.
omega2 a écrit : Pourquoi stocker le total des deux colonnes? N'est il pas plus simple de demander la somme des deux colonnes quand tu as besoin de cette donnée? (un simple "pommes + poires" est suffisant pour avoir le total) |
Quand j'ai demandé ça disons que c'était par fénéantise Au lieu de marquer les 3 données à chaque fois (j'en ai "besoin" tout le temps), ça m'aurait évité de n'en marquer que 2, la 3ème se faisant automatiquement. C'est quand même possible ou pas ?
omega2 a écrit : Même réponse que juste au dessus. Pourquoi stocker le résultat d'une opération mathématique simple qui porte sur les valeurs contenu dans une seule table? Il est tellement facile et rapide de calculer ces valeurs quand on en a besoin que ça ne sert à rien de les avoir en dur avec en plus le risque qu'elles ne soient pas à jour pour des raisons X ou Y. |
Là j'ai pas tout compris...
Tu me demandes pourquoi je veux le pourcentage dans une colonne ? Ben pour l'avoir sous les yeux directement, au lieu d'avoir à calculer à chaque fois... Je crois pas avoir bien compris ta question...
Marsh Posté le 24-08-2007 à 17:28:40
rufo a écrit : un grand principe d'une BD : ne jamais stocker des infos qui peuvent être recalculées (et comme tout principe, y'a des exceptions, par ex, pour des questions de perfs). |
Le truc c'est que c'est vraiment "important" la colonne des pourcentages, ou de la 3ème valeur qui est le total des 2 autres, je peux pas "m'en passer".
Les dates sont au format jj/mm/aaaa, le tri fonctionne.
Merci pour ta réponse
Marsh Posté le 24-08-2007 à 18:13:18
Sinon autre problème...
Pour je ne sais quelle raison il y a un numéro automatique (dans ID_Matches) qui a disparu. Comment je fais pour réger le problème ?
Impossible d'insérer une ligne (ou alors j'ai pas trouvé comment faire...) même en enlevant la fonction numéro auto, et en refaisant une colonne pour avoir les bons numéro auto, ça me les met dans le désordre ça ne respecte pas les dates (si je mets tri par date ça me mettra les numéro auto genre de 1 à 70, et je sais pas pourquoi ça enchaine par 150-> 240, pour finir par 71->149)...
Marsh Posté le 24-08-2007 à 18:14:07
Quand tu fais une requête en sql pur (access à sa propre syntaxe mais c'est la même chose juste écrite différemment) tu peux demander à ce que certaines colonnes du résultat soient calculé à la volé.
Par exemple avec une requête : SELECT tomate, concombre, (tomate + concombre) AS legume from FRUITLEGUME (example fictif , "tomate" et "concombre" étant des colonnes de la table "fruitlegume" )
Si pour une ligne de donné t'as 2 dans la colonne tomate et 4 dans la colonne concombre, t'obtiendra 6 dans la troisième colonne du résultat. C'est la même chose avec les autres opérations mathématiques.
Pour faire des requêtes de modifications de données, il vaut mieux que tu consultes des tutoriels sur access ou la documentation d'access, ça sera plus précis que ce que je pourrais t'expliquer.
Marsh Posté le 24-08-2007 à 18:28:50
omega2 a écrit : Quand tu fais une requête en sql pur (access à sa propre syntaxe mais c'est la même chose juste écrite différemment) tu peux demander à ce que certaines colonnes du résultat soient calculé à la volé. |
Ahhh merci ! En créant une requête vite fait ça marche (c'est déjà un exploit que j'y arrive).
Et après, comment je fais pour l'avoir dans ma table (si c'est utile) ?
Marsh Posté le 24-08-2007 à 18:47:53
Que t'ai besoin de la somme de ces deux colonnes comme résultat, comme condition de sélection (par exemple colonne1 > colonne2 + colonne3) ou comme critaire de tri, tu peux le faire de la même manière. L'opération mathématique sera juste dans des parties différentes de la requête.
N'hésite pas à chercher des tutoriels sur tout ça, t'auras des réponses mieux écrites et t'y apprendra pleins de choses dont certaines que tu n'as pas pensé à te poser.
Marsh Posté le 24-08-2007 à 19:04:51
Ouais je sais mais je sais pas je dois faire une allergie des tutoriaux à propos d'access et de SQL, je comprends rien et je trouve jamais ce que je recherche...
C'est comme là, j'arrive à faire la requête pour la victoire (en fonction du score) ou pour la défaite, mais les 2 en même temps soit ça me met automatiquement une autre colonne (Expr...etc) soit quand je tente de mettre dans la même colonne ça me met que l'alias de sortie est répliqué.
Ca doit être un truc tout con tout simple, je cherche dans les tutoriaux, je trouve rien...
EDIT: ah j'ai enfin trouvé, suffisait de marquer l'autre possibilité juste après au lieu de tout réécrire...
Marsh Posté le 22-08-2007 à 20:24:57
Bonjour à tous
Bon je m'excuse d'avance de mes questions, mais j'ai beau chercher je trouve rien et comme je suis hyper hyper débutant je sais pas comment chercher je sais pas où chercher j'ai pas le vocabulaire etc etc
Donc voilà plusieurs petites questions simples pour vous je pense mais impossible pour moi :
- comment faire pour qu'une valeur soit directement mise dans la colonne, en fonction des valeurs d''autres colonnes (dans la même table). Je sais pas si c'est clair, par exemple comment faire pour qu'une colonne "victoires/défaites" se remplisse automatiquement en fonction des colonnes "score de l'équipe" et "score de l'adversaire" ?
- comment faire pour que l'ordre croissant suivant la date soit respecté (et donc qu'il y ait message d'erreur), c'est-à-dire 1 : 11/03/2004, 2 : 15/03/2004, 3 : 17/03/2004 4 : 12/03/2004 le N°4 est faux. Comment faire pour qu'Access le consdère comme non valide ?
- comment faire pour que la valeur d'une colonne soit automatiquement la somme de 2 valeurs de 2 autres colonnes (tout dans la même table), à chaque fois tout pour la même ligne évidemment. Par exemple comment faire pour que la colonne "nombre de fruits" soit la somme des colonnes "nombre de pommes" et "nombre de poires" (je sais mes exemples sont ridicules mais bon au moins je suis sûr de me faire comprendre)
- est-il possible d'avoir une colonne qui calcule un pourcentage à partir d'une seule et même colonne avec une info du type 2/5 (et donc que ça calcule 40% directement)? ou faut-il obligatoirement une colonne pour le 2, une colonne pour le 5 ?
Voilà j'espère que j'ai été clair et que vous m'aiderez à avancer parce que là je peine ! (bon normal je suis + que débutant )
Merci.
Message édité par Sam Dalembert le 22-08-2007 à 20:48:21