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

Modélisation Discussion :

Menu principal pour des bases de données différentes ?


Sujet :

Modélisation

  1. #21
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 31
    Points
    31
    Par défaut
    La liste déroulante elle proposera des valeurs en se basant sur ta table AreaID
    et tes autres sources pourront se référer à une région par une relation avec la table Area
    La table AreaID dont vous parlez correspond à la table paramètres de la locale ?

    Parce que j'ai essayé comme ça, avec la requête SQL suivante placée dans la source du formulaire Wells (basé sur la table IDWell):
    SELECT IDWell.* FROM IDWell INNER JOIN AreaID ON IDWell.AreaID = AreaID.AreaID
    mais il me met "incohérence de type dans une expression".. Il y a peut-être trop de AreaID, sachant que c'est le même nom pour la table paramètres que pour le champ codant la région... A moins que la table paramètre ne soit pas la table area ID !

    Sinon, autre précision, je ne me suis pas occupé de votre petite fonction, donc au-delà de la requête ci-dessus je n'ai rien entré de + que :
    - la table "Area" ds la partie dorsale avec 2 champs
    - la table "AreaID" (avec un seul champ AreaID sans clé primaire) pour les paramètres, ds la bdd locale
    - la table "AreaID" en tant que source du formulaire d'accueil
    - et la liste déroulante basée sur la table "AreaID"...

    Où pêches-je ?

  2. #22
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Kareg
    - et la liste déroulante basée sur la table "AreaID"...
    Va-t-on y arriver ?

    La liste ne peut évidément se base sur ta table locale puisque celle-ci ne contient qu'une ligne... elle se base sur ta table de référence, composées des 2 champs (ID et libellé)

    Dans le genre j'aime bien ambrouiller les choses.... commence par renommer tes tables, en respectant de préférence les conventions de nommage d'usage http://argyronet.developpez.com/offi...ention/#L2-1-1


    Bon dev

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 31
    Points
    31
    Par défaut
    toujours pas ...

    Avec ce changement (la table locale s'appelle désormais TblAreaParameters, avec un seul champ AreaID), même message d'incohérence avec l'instruction suivante :

    SELECT IDWell.* FROM IDWell INNER JOIN TblAreaParameters ON IDWell.AreaID = TblAreaParameters.AreaID
    Par contre quand je remplace dans le code la TblAreaParameters par la table Area (de la dorsale), le filtrage ne marche pas non plus mais il n'y a pas d'incohérence et le tri croissant s'effectue sur les enregistrements (edit: c'est normal à la réflexion)...

    Il me semble que le pb vient de la table locale (dont je n'ai pas compris le rôle, donc je l'ai sûrement faite avec des erreurs), mais bon ça peut venir d'ailleurs.. Ou bien peut-être est-ce l'instruction qui n'est pas correcte, et/ou que je ne place pas au bon endroit ?

    P-S: Vous avez le droit de me bannir à vie du forum mais seulement après résolution de ce post

  4. #24
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 31
    Points
    31
    Par défaut
    Nouvelle précision : j'ai pensé à faire un lien dans ma TblAreaParameters entre son unique champ AreaID et le champ AreaID de la table Area (de la dorsale)... Et maintenant plus de message d'erreur lorsque je clique sur mon bouton d'ouverture de formulaire Wells, mais apparaît un formulaire Wells complètement vide de données (slmt le titre) !

    J'ai l'impression de progresser dans ma nage de fer à repasser...

  5. #25
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    P-S: Vous avez le droit de me bannir à vie du forum ...
    ne me tente pas


    Bon sérieusement, je tente de t'expliquer une Nieme fois:
    - la table locale sert uniquement à mémoriser la région que l'utilisateur a choisi. Vu que tu lui demandes à chaque ouverture, tu pourrais à la limite t'en passer et utiliser exclusivement les fonctions en VBA que je t'ai proposées
    - la table dans la dorsale te permet d'avoir quelques part la liste des régions. Elle permet par exemple d'alimenter la liste déroulante au démarrage.

    Tes messages de type "incohérence de type dans une expression" sont sans doute liés à des incohérences dans les types des champs que tu relies genre texte avec numérique...)

    Maintenant relis tous cela... le cas échéant recrées une base vide et refais la structure depuis le début....

    Bon courage

  6. #26
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 31
    Points
    31
    Par défaut
    J'y suis presque !

    J'ai tout remis à plat, j'ai saisi la logique de la chose sauf pour la fonction qui retourne le code de la région selectionnée (et j'aimerai bien l'utiliser!)...

    Dans l'exemple ci-dessous, à quoi correspondent "mCoderegion" et "sCode" ?

    Private function mCodeRegion as String 'en supposant ici que ta région identifiée par un code alpha
    Public function ap_GetRégionEnCours() as string
    ap_GetRégionEnCours = mCodeRégion
    End Function
    Merci encore, je sens que la fin approche!

    Kareg.

  7. #27
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Kareg Voir le message
    ...
    "mCoderegion" et "sCode" ?
    mCodeRegion = variable globale stockant durant le temps d'utilisation de l'application, le code de la région utilisée. La variable permet d'éviter un accés systématique à la table de Paramétres à chaque fois que l'on veut faire référence à cette valeur.


    sCode= Cherche la définition d'une fonction ou d'une procédure....

  8. #28
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 31
    Points
    31
    Par défaut
    Je cherche, je cherche, mais...

    Est-ce que mCodeRegion et sCode ont à voir avec les champs des tables Area? Je ne saisi pas comment sont liées les choses, et comment cela peut fonctionner... Est-ce qu'il y a une autre partie de code à compléter, une fonction à rajouter ?
    Il manque un lien, mais je ne sais pas où, car pour l'instant j'en suis au point où il faut aller modifier soit même la table locale pour que la selection se fasse sur les enregistrements en fonction des régions... Le choix fait ds la liste déroulante n'est donc pas mis à jour dans la table locale.

    Snif.

  9. #29
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 31
    Points
    31
    Par défaut
    Bon...
    Je pense vraiment ne pas être loin du tout, ça serait bête de s'arrêter donc j'insiste et résume à nouveau où j'en suis :

    1)Voici votre fonction vba écrite dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private mAreaCode As String
     
    Public Function ap_GetCurrentArea() As String
     ap_GetCurrentArea = mAreaCode
    End Function
     
    Public Sub ap_SetCurrentArea(ByVal sCode As String)
    mAreaCode = sCode
    End Sub
    2)Le formulaire menu d'accueil :
    Sa source est la table locale "TblAreaParameters"
    Il contient une liste déroulante, lié aux champs AreaID et AreaName de la table (dorsale) "Area", et permettant ainsi le choix des régions. Une procédure évenementielle est écrite sur l'évènement après Mise à Jour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CboAreaID_AfterUpdate()
    ap_SetCurrentArea Me.CboAreaID
    End Sub
    3)Et enfin un formulaire Wells où se trouvent des enregistrements de données, et dont la source est une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDWell.* FROM IDWell WHERE AreaID = ap_GetCurrentArea
    Quand j'essaye d'entrer un choix ds la liste déroulante, celui-ci n'a aucun effet... Lorsque je clique sur mon bouton de commande ouvrant le formulaire Wells, une boite de dialogue apparait me demandant d'entrer une valeur de paramètre "ap_GetCurrentArea:"... Si j'entre un chiffre entre 1 à 4 (correspondant à mon nombre de régions), la procédure fonctionne et j'arrive bien à selectionner les enregistrements de Wells selon la région... Mais bien entendu il faudrait que ce soit fait avec la liste déroulante du menu d'accueil, et tous mes essais sont infructueux pour le moment.

    En ajout (et pour finir!), voici ce que je ne comprends pas, et qui pourrait constituer une piste pour trouver où sont les manques:
    - La table locale ne sert juste qu'à être la source du menu d'accueil ; est-ce normal ?
    - Les tables Area (dorsale) et TblAreaParameters (locale) ne sont pour l'instant plus liées, faut-il les lier ?
    - Malgré toutes mes recherches je n'ai pas élucidé la question du sCode, que j'ai donc laissé tel quel...

    je n'ose plus dire MERCI (lol) !

    Kareg.

  10. #30
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Essaie simplement d'ajouter les parenthèses à l'appel de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDWell.* FROM IDWell WHERE AreaID = ap_GetCurrentArea()
    Pour rappel, tu peux aussi faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT IDWell.* FROM IDWell INNER JOIN TblAreaParameters ON IDWell.AreaID = TblAreaParameters.AreaID
    Avec un petit détail toutefois: il faut pour cela que la modification apportée à la table TblAreaParameters via la liste déroulante soit enregistrée. Le plus simple est sans doute de forcer l'enregistrement des modifs au moment de la sélection dans la liste déroulante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CboAreaID_AfterUpdate()
    ap_SetCurrentArea Me.CboAreaID
    Docmd.RunCommand acCmdSaveRecord 
    End Sub

  11. #31
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 91
    Points : 31
    Points
    31
    Par défaut
    Essaie simplement d'ajouter les parenthèses à l'appel de la fonction
    Je n'y crois pas ça y est ça fonctionne !!! dire que ça a fini par bloquer sur un détail

    En tout cas mout1234 et les autres je ne vous remercierai jamais assez, ce forum est magique

    Comme je vais continuer à bosser sur des bdd je vous promets qd même d'essayer de moins vous solliciter à l'avenir... d'ailleurs si vous connaissez un bouquin de référence "tout sur VBA de A à Z pour les nuls et moins nuls" je suis preneur!

    Bonne journée !

    Kareg, soulagé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/01/2008, 17h02
  2. Réponses: 6
    Dernier message: 14/11/2007, 16h38
  3. Joindre des tables de deux bases de données différentes
    Par jf1985 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/09/2007, 12h23
  4. Réponses: 3
    Dernier message: 24/09/2007, 11h54
  5. Réponses: 11
    Dernier message: 16/06/2006, 13h46

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