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

VBA Access Discussion :

Ajouter une condition dans un db.Openrecordset [AC-2016]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Par défaut Ajouter une condition dans un db.Openrecordset
    Bonjour
    Je débute encore

    J'ai une fonction publique générant un planning.
    En l'état, elle prend toutes les personnes de la table [T_Personnel] et génère un planning.
    Je souhaite restreindre les personnes à seulement celles dont le champs [Magasin] situé dans la table [T_Personnel] est égal au champ [Magasin] de la table [T_MagasinCourant], pour que le planning ne soit généré que sur le magasin "actif"
    Voici le début de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Public Function GenererPlanningPersonnels(DateDebut As Date, NbSemaines As Long)
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim rs1 As DAO.Recordset
    Dim rs2 As DAO.Recordset
    Dim dt1 As Date
    Dim J1 As Long, i As Long
    Dim IdPersonnel As Long
     
    Set db = CurrentDb
    'Set rs = db.OpenRecordset("T_Personnel", dbOpenDynaset)
    Set rs = db.OpenRecordset("select * from T_Personnel where (Magasin= " & [T_MagasinCourant]![Magasin] & "), dbOpenDynaset)
    Set rs1 = db.OpenRecordset("T_Planning", dbOpenDynaset)
     
    Do Until rs.EOF
    En ligne 11 j'ai passé le code original en commentaire, et j'ai mis en ligne 12 ce que je voudrais, mais vu mon faible niveau ça ne fonctionne pas , j'ai une erreur de syntaxe

    Merci d'avance pour votre aide et votre intérêt.

  2. #2
    Membre éclairé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Par défaut
    Je précise que la table [T_MagasinCourant] ne stocke qu'une seule valeur, celle justement du magasin "actif" (choisi au moment du login dans l'appli.)

  3. #3
    Membre émérite Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 980
    Par défaut Ajouter une condition dans un db.Openrecordset
    Bonjour,

    Je suppose que ta requête devrait être plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = db.OpenRecordset("select * from T_Personnel INNER JOIN T_MagasinCourant ON T_Personnel.Magasin=[T_MagasinCourant]![Magasin] ;"), dbOpenDynaset)
    Je pense également que la jointure serait plus performante avec un code magasin de type entier long en clé unique dans la table T_MagasinCourant et indexé avec doublons dans la table T_Personnel .

  4. #4
    Membre éclairé
    Avatar de vavavoum74
    Homme Profil pro
    Responsable magasin
    Inscrit en
    Mars 2018
    Messages
    356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable magasin

    Informations forums :
    Inscription : Mars 2018
    Messages : 356
    Par défaut
    merci de ton intérêt .

    J'ai fait un copier coller de ton code, j'obtiens encore une erreur de syntaxe.

    rajouter un code magasin dans la table T_Magasin Courant c'est faisable, il y a déjà un code attribué à chaque magasin dans une table T_Magasin, mais il est de type texte court, car peut être de type: 2B, 1B, 08 etc.. donc ce serait un nouvel id, sans rapport avec celui de ma table T_Magasin

    quand tu dis: "et indexé avec doublons dans la table T_Personnel" là je ne comprends pas...

    ceci permettrait de gagner en rapidité si j'ai bien compris?

  5. #5
    Membre émérite Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 980
    Par défaut Ajouter une condition dans un db.Openrecordset
    J'ai fait un copier coller de ton code, j'obtiens encore une erreur de syntaxe
    Peut-être manque-t-il:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = db.OpenRecordset("select T_Personnel.* from T_Personnel INNER JOIN T_MagasinCourant ON T_Personnel.Magasin=[T_MagasinCourant]![Magasin] ;"), dbOpenDynaset)
    quand tu dis: "et indexé avec doublons dans la table T_Personnel" là je ne comprends pas...
    Dans l'idée les recherches sont plus rapides sur des champs numériques longs et indexés, donc il serait bon à minima dans ton cas que ton champ [T_MagasinCourant]![Magasin] soit une clé unique (même si alpha), et que dans la table T_Personnel, qu'il soit indexé avec doublons.

  6. #6
    Membre émérite Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 980
    Par défaut Ajouter une condition dans un db.Openrecordset
    Ouuups!

    Je pense avoir repéré le problème dans le SQL: il s'agirait d'une parenthèse en trop. Essaie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rs = db.OpenRecordset("select T_Personnel.* from T_Personnel INNER JOIN T_MagasinCourant ON T_Personnel.Magasin=[T_MagasinCourant]![Magasin] ;", dbOpenDynaset)
    Je précise que j'avais moi-même copié-collé ton SQL

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

Discussions similaires

  1. Ajouter une condition dans mon XML
    Par GeoffreyMtl dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/01/2015, 06h31
  2. Ajouter une condition dans une fonction
    Par le_dilem dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 17/03/2011, 22h00
  3. Ajouter une condition dans une fonction
    Par le_dilem dans le forum Général Python
    Réponses: 3
    Dernier message: 13/03/2011, 13h43
  4. ajouter une condition dans une formule
    Par NEC14 dans le forum Excel
    Réponses: 9
    Dernier message: 14/10/2008, 14h51
  5. Ajout de conditions dans une requete
    Par Sebastien_INR59 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/06/2006, 19h17

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