IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

[Débutant] fonction équivalente de WHERE


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut [résolu] [Débutant] fonction équivalente de WHERE
    je souhaire créer une formule avec le générateur d'expression,sur le modèle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE surface_culture
    SET [Mais] = [Producteurs_2005_reman]![Surface_num] FROM Producteurs_2005_reman
    WHERE ((([Producteurs_2005_reman]![Culture])="maïs"));
    ACCESS est définitivement faché avec mes requêtes sous SQL, je passe donc par le générateur d'expression, et ça, ça veut bien marcher.
    J'ai besoin de savoir quelle fonction du générateur correspond à la combinaison FROM/ WHERE...
    Ça doit être élémentaire, mais je n'ai pas encore réussi à trouver une liste exhaustive des correspondances des fonctions intégrées au générateur...et si je dois vérifier dans l'aide l'effet de chaque fonction, j'en ai pour des lustres.

    Merci de m'aiguiller...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 419
    Points : 508
    Points
    508
    Par défaut
    salut

    je crois que les expressions et les requetes font un boulot totalement différent.
    En aucun cas une expression de calcul n'est capable d'écrire le résultat dans une table.
    Sinon la fonction conditionnelle qui se rapproche le plus de WHERE c'est VraiFaux ou Iif
    Je ne pense pas qu'on puisse se passer de sql en base de données...

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    FROM et WHERE sont des ordres SQL, en aucun cas il ne s'agit de fonctions. Le SQL est le langage le plus proche des bases de données donc le plus performant. Vouloir le transrcire en fonction VB correspond à compromettre l'ensemble de tes projets

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut
    bon, je précise mon problème:
    Dans ma table principale,j'ai entre autre deux colonnes, l'une s'appelle "culture", l'autre "surface".
    La table recense des parcelles, et pour chaque parcelle, la culture et la surface sont indiquées.
    J'ai crée une nouvelle table, dans laquelle j'aimerais une colonne pour chaque culture, avec l'ensemble des surfaces plantées respectivement pour chaque culture, (et quelque part le total de la surface plantée pour chaque culture).
    Je veux faire une requête de mise à jour sur ma nouvelle table, pour intégrer dans les colonnes des différentes cultures l'ensemble des surfaces.
    Je veux donc créer une formule, avec le générateur, vu qu'en SQL je n'arrive à rien, qui me place les valeurs là où je veux.
    Je sais que FROM et WHERE sont des ordres SQL, et non des fonctions VB, mais j'ai un gros problème avec le SQL, il doit bien avoir moyen de le contourner?

    Vouloir le transrcire en fonction VB correspond à compromettre l'ensemble de tes projets
    Je n'ai pas de très grandes ambitions à ce niveau là...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Points : 64
    Points
    64
    Par défaut
    tente une requete de pmis a jour du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TaTableAMettreAJour SET TaTable.TonChampsAMettreAJour = Valeur WHERE UneCondition;
    En sachant que la "Valeur" peut etre egale a un autre champs syntaxé TaTable.TonChamps
    voilou voilou
    ++

  6. #6
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    slt,

    Je veux donc créer une formule, avec le générateur, vu qu'en SQL je n'arrive à rien
    Difficile de te comprendre, qu'appelle tu une formule???
    Est-ce que tu veux dire par là que tu voudrais créer des requêtes mais que tu ne maîtrises pas le SQL et que donc au lieu de taper les commandes SELECT, WHERE, FROM, .... tu veux utiliser QBE (query by exemple, c'est la grille avec la liste des champs et les tables au-dessus) pour créer tes requêtes et laisser Access générer le code SQL???

    En résumé tu veux faire des requêtes mais tu veux pas voir le SQL c'est ça???

    Si c'est ça alors oui c'est fait pour ça, beaucoup de gens utilise Access sans connaître le SQL.

    Il suffit d'ajouter une table, ça fait office de clause FROM
    Il doit y avoir une ligne intitulée "où" qui fait office de clause WHERE.

    Je ne crois pas qu'il y ait un tuto sur le site (me trompe-je?) mais si tu cherches des infos sur google alors cherche "QBE".

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    le problème principal provient de la conception de ta table
    en fait pour rester genérique il faudrait que le nom de produit
    soit dans une colonne
    exemple
    produit parcelle
    tournesol 4.85
    lin 4.28
    épeautre 6.24

    si tu mets tes produits en colonne
    cela suppose une fonction majmatable(nomtable, nomchamp, nouvellevaleur(éventuellement une chaîne exprimant un calcul),
    un paramarray pour les clauses (champ1, condition1...)
    il faut ensuite évaluer nouvelle valeur et les clauses, si on restreint
    les possibilités à évaluer pour nouvelle valeur, et pour les clauses c'est déja un travail sérieux

    d'une façon générale on ne crée pas une nouvelle colonne pour chaque
    variation sur un axe d'analyse mais une une colonne par axe d'analyse

    le produit est un axe d'analyse de la même ainsi si tu avais à analyser
    produit rendement temps
    tu aurais 3 colonne et non
    blé2005 maîs2005 blé2006 maîs2006

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut
    c'est bien en QBE que je veux travailler.

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut
    le problème principal provient de la conception de ta table
    en fait pour rester genérique il faudrait que le nom de produit
    soit dans une colonne
    exemple
    produit parcelle
    tournesol 4.85
    lin 4.28
    épeautre 6.24

    si tu mets tes produits en colonne
    cela suppose une fonction majmatable(nomtable, nomchamp, nouvellevaleur(éventuellement une chaîne exprimant un calcul),
    un paramarray pour les clauses (champ1, condition1...)
    il faut ensuite évaluer nouvelle valeur et les clauses, si on restreint
    les possibilités à évaluer pour nouvelle valeur, et pour les clauses c'est déja un travail sérieux
    je dois donc changer la structure de ma nouvelle table ....Je vais aller faire ça et je reviens

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut
    j'ai maintenant une table

    culture____surface_totale
    mais________
    blé________
    orge________
    pois__________
    Comment je fais pour avoir la somme des surfaces dans la colonne "surface_totale"?

    En QBE, je cherche à avoir un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = [Producteurs_2005_reman]![Surface_num] [i]avec[/i] [Producteurs_2005_reman]![Culture] = [surface_culture]![culture]
    sachant que je ne sais pas ce qu'il faut metre à la place du avec..

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 110
    Points : 64
    Points
    64
    Par défaut
    en SQL pour avoir la somme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SUM(surface_total.*) AS NomDuNouveauChamps
    Cet ligne ce tape dans le SELECT de ton SQL

    ++

  12. #12
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut
    en SQL pour avoir la somme :
    Code:
    SUM(surface_total.*) AS NomDuNouveauChamps


    Cet ligne ce tape dans le SELECT de ton SQL
    je ne veux pas la somme de la totalité de la colonne, mais culture par culture....
    ce n'est pas possible de sélectionner uniquement les valeurs des cellules de la table principale pour chauqe culture, et de calculer le total de ces valeurs?

    En français, ma requête se traduirait par "calculer la somme des surface pour laquelle la culture est "mais" "

  13. #13
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    regarde les requêtes regroupements

    en QBE, soit tu cliques sur le symbol sigma, soit tu cherches dans le menu tu devrais trouver quelque part "opérations"

    ça te rajoute une ligne "opération" dans laquelle tu mets regroupement pour le champ culture et somme pour le champ surface

    ça se traduira tout seul par un group by en SQL

  14. #14
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut
    les opérations, je les ai trouvées, j'ai aussi réussi à obtenir les surfaces totales des cultures en créeant une requête de sélection pour chaque culture, et en appliquant ensuite l'opération somme. Seulement, je veux créer une table qui regroupe tous ces résultats....pour avoir une vision globale des surfaces attribuées à chauqe culture!

  15. #15
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    pas besoin de créer une table, c'est même de trop

    sauf si ta requête est très lente, à ce moment tu fais le calcul régulièrement et tu stockes les données pour pouvoir les afficher rapidement

    sinon tu fais directement ton formulaire ou état avec la requête comme source de données, exactement comme si c'était une table

    en créeant une requête de sélection pour chaque culture
    pourquoi une requête par culture?
    tu fais une seule requête et ensuite tu ajoutes un filtre pour n'afficher que la culture demandée

  16. #16
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut
    merci, ça commence à devenir plus clair...

  17. #17
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 56
    Points : 16
    Points
    16
    Par défaut
    j'ai réussi à faire un truc, mais je ne sais pas comment..Dans tous les cas, j'ai maintenant une requête qui m'affiche la surface totale pour chaque culture...Que vouloir de plus?
    si, je pourrais essayer de comprendre ce que j'ai fait...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/05/2007, 11h03
  2. Réponses: 2
    Dernier message: 04/05/2007, 15h10
  3. fonction équivalente à la fonction MOD (oracle) dans ms-sql
    Par rodrigue50 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/07/2005, 16h14
  4. [Débutant] fonction CALLBACK
    Par tlt dans le forum MFC
    Réponses: 2
    Dernier message: 29/10/2004, 16h55
  5. [Ada] [Débutant] Fonction et Put_Line
    Par hitchie dans le forum Ada
    Réponses: 1
    Dernier message: 18/10/2004, 09h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo