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

Requêtes et SQL. Discussion :

passage variable dans un select


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut passage variable dans un select
    Bonjour,

    j'ai ça comme code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub fk_secact_code_AfterUpdate()
    Dim v_pk_secact As String
     
        v_pk_secact = fk_secact_code.Column(1)
    Texte96 = v_pk_secact
    Dim liste_secssact As DAO.Recordset
        Dim req As DAO.Database
        Set req = CurrentDb
        Set liste_secssact = req.OpenRecordset("SELECT libelle, pk_secssact  FROM t_ref_secssact WHERE fk_secact_code=" & v_pk_secact, dbOpenDynaset)
        fk_secssact_code = liste_secssact.Fields(0).Value
     
     
     
    End Sub
    dans Tesxe96 l'id de l'enregistrement s'affiche sans problème
    mais j'ai un message d'erreur au niveau de la requête SELECT

    trop peu de paramètre. 1 attendu

    le truc le plus bizarre est que ce code fonctionne sur une autre base...
    je ne comprend pas...

    Merci pour votre aide

    Access 2016

  2. #2
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    971
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 971
    Points : 1 163
    Points
    1 163
    Par défaut passage variable dans un select
    Bonjour,

    Tu peux essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set liste_secssact = req.OpenRecordset("SELECT libelle, pk_secssact  FROM t_ref_secssact WHERE fk_secact_code='" & v_pk_secact & "'", dbOpenDynaset)
    La variable issue de ta liste étant de type string.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    avec ce code j'ai une erreur de syntaxe...

    merci quand même

  4. #4
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    971
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 971
    Points : 1 163
    Points
    1 163
    Par défaut passage variable dans un select
    Laquelle?

    Si tu mets un point d'arrêt sur cette ligne peux-tu interroger cette variable dans la console?

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut
    Bonjour,

    la bonne pratique est de passer par des paramètres plutôt que de construire des requêtes par concaténation :

    https://access.developpez.com/faq/?page=SQL#ReqParamVar

  6. #6
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    971
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 971
    Points : 1 163
    Points
    1 163
    Par défaut passage variable dans un select
    Du coup si ton paramètre attendu est un entier long (ce qui serait plus logique), laisse ton select tel qu'il était et affecte à ta variable la colonne 1 de ta liste convertie en long (CLng).
    N'oublie pas de déclarer ta variable en long
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim v_pk_secact As Long

  7. #7
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    j'en suis là et toujours le même problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim v_pk_secact As Long
     
        v_pk_secact = fk_secact_code.Column(1)
        Texte90 = v_pk_secact
        Dim req_liste_secssact As DAO.Recordset
        Dim req As DAO.Database
        Set req = CurrentDb
        Set req_liste_secssact = req.OpenRecordset("SELECT libelle, pk_secssact_code  FROM t_ref_secssact WHERE pk_secact_code=" & v_pk_secact, dbOpenDynaset)
     
    End Sub
    et je n'arrive pas non plus à faire la technique avec parameters...

  8. #8
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    971
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 971
    Points : 1 163
    Points
    1 163
    Par défaut passage variable dans un select
    Bonjour,

    dans Tesxe96 l'id de l'enregistrement s'affiche sans problème
    mais j'ai un message d'erreur au niveau de la requête SELECT
    Peux-tu mettre un point d'arrêt dans ton code sur la ligne 5 et, dans la console faire:

    Si la réponse est 8, c'est du texte et ma première réponse avec les simples cotes est OK
    Si la réponse est 2, il s'agit d'un integer et il faut déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim v_pk_secact As String
    Si la réponse est 3, il s'agit d'un longet il faut déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim v_pk_secact As Long

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    dans le même formulaire :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub cp_AfterUpdate()
    Dim v_coupe_departament As Long
     
    v_coupe_departement = Left(Forms!f_societe.cp.Value, 2)
    departement = v_coupe_departement
    Dim req_region As DAO.Recordset
        Dim sql_region As DAO.Database
        Set sql_region = CurrentDb
        Set req_region = sql_region.OpenRecordset("SELECT region  FROM t_ref_region WHERE cp=" & v_coupe_departement, dbOpenDynaset)
        region = req_region.Fields(0).Value
    End Sub
     
    Private Sub fk_secact_code_AfterUpdate()
    Dim v_pk_secact As Long
     
        v_pk_secact = fk_secact_code.Column(1)
        Texte90 = v_pk_secact
        Dim req_liste_secssact As DAO.Recordset
        Dim req As DAO.Database
        Set req = CurrentDb
        Set req_liste_secssact = req.OpenRecordset("SELECT libelle, pk_secssact_code  FROM t_ref_secssact WHERE pk_secact_code=" & v_pk_secact, dbOpenDynaset)
     
    End Sub
    la première fonctionne nickel et me rempli les chams mais pas la seconde...

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Ric500 Voir le message
    Bonjour,



    Peux-tu mettre un point d'arrêt dans ton code sur la ligne 5 et, dans la console faire:

    Si la réponse est 8, c'est du texte et ma première réponse avec les simples cotes est OK
    Si la réponse est 2, il s'agit d'un integer et il faut déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim v_pk_secact As String
    Si la réponse est 3, il s'agit d'un longet il faut déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim v_pk_secact As Long
    la valeur est un ID avec auto-incrément géré par access

  11. #11
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    971
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 971
    Points : 1 163
    Points
    1 163
    Par défaut passage variable dans un select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim v_pk_secact As Long
     
        v_pk_secact = fk_secact_code.Column(1)
    Si fk_secact_code est une liste déroulante, les valeurs issues sont en String ( ) , Du coup tu dois convertir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim v_pk_secact As Long
     
        v_pk_secact = Clng(fk_secact_code.Column(1))

  12. #12
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    971
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 971
    Points : 1 163
    Points
    1 163
    Par défaut passage variable dans un select
    D'ailleurs, je pense que tu devrais revoir tes affectations:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim v_coupe_departament As Long
    v_coupe_departement = Left(Forms!f_societe.cp.Value, 2)
    La fonction Left renvoie du string...

  13. #13
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    je débute en vba... dur comme langage je trouve...
    je suis vos conseils et je vous fais un retour

  14. #14
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    résulta dans mon formulaire

    Nom : Capture.PNG
Affichages : 159
Taille : 10,0 Ko

    donc comme je vous disais le Sub sur le code postale fonctionne, ça rempli automatiquement la région et le département

    le texte90 affiche l'id du secteur d'activité, mais impossible de le faire passer dans le sql...

    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
    16
    17
    18
    19
    20
    21
    22
    23
    Private Sub cp_AfterUpdate()
    Dim v_coupe_departament As Long
     
    v_coupe_departement = Left(Forms!f_societe.cp.Value, 2)
    departement = v_coupe_departement
    Dim req_region As DAO.Recordset
        Dim sql_region As DAO.Database
        Set sql_region = CurrentDb
        Set req_region = sql_region.OpenRecordset("SELECT region  FROM t_ref_region WHERE cp=" & v_coupe_departement, dbOpenDynaset)
        region = req_region.Fields(0).Value
    End Sub
     
    Private Sub fk_secact_code_AfterUpdate()
    Dim v_pk_secact As Long
     
        v_pk_secact = CLng(fk_secact_code.Column(1))
        Texte90 = v_pk_secact
        Dim req_liste_secssact As DAO.Recordset
        Dim req As DAO.Database
        Set req = CurrentDb
        Set req_liste_secssact = req.OpenRecordset("SELECT libelle, pk_secssact_code  FROM t_ref_secssact WHERE pk_secact_code=" & v_pk_secact, dbOpenDynaset)
     
    End Sub
    en gros je patoge

  15. #15
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    971
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 971
    Points : 1 163
    Points
    1 163
    Par défaut passage variable dans un select
    Peux-tu me joindre ta base, si elle ne comporte pas de données confidentielle? (zippée)

  16. #16
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    pour la base c'est compliqué...

    ce que je comprend c'est que j'ai fait ça sur une autre base et ça fonctionne...

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub Entreprise_AfterUpdate()
     
     
            Dim v_id_prospect As String
                v_id_prospect = Entreprise.Column(2)
     
            Ville = Entreprise.Column(1)
           test_id_prospect = v_id_prospect
     
        Dim record_fiche_prospect As DAO.Recordset
        Dim req As DAO.Database
        Set req = CurrentDb
        Set record_fiche_prospect = req.OpenRecordset("SELECT source, secteur_activite, profil, adresse, num_voie, voie, libelle_voie, cp, prenom, nom, tel, mail, fonction, naf, siret  FROM t_fiche_prospect WHERE ID_prospect=" & v_id_prospect, dbOpenDynaset)
     
          Source = record_fiche_prospect.Fields(0).Value
          Secteur_Activite = record_fiche_prospect.Fields(1).Value
          Profil = record_fiche_prospect.Fields(2).Value
          Adresse = record_fiche_prospect.Fields(3).Value
          num_voie = record_fiche_prospect.Fields(4).Value
          Voie = record_fiche_prospect.Fields(5).Value
          libelle_voie = record_fiche_prospect.Fields(6).Value
          CP = record_fiche_prospect.Fields(7).Value
          prenom = record_fiche_prospect.Fields(8).Value
          Nom = record_fiche_prospect.Fields(9).Value
          Tel = record_fiche_prospect.Fields(10).Value
          Mail = record_fiche_prospect.Fields(11).Value
          Fonction = record_fiche_prospect.Fields(12).Value
          naf = record_fiche_prospect.Fields(13).Value
          siret = record_fiche_prospect.Fields(14).Value

  17. #17
    Membre éprouvé Avatar de Ric500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    971
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 971
    Points : 1 163
    Points
    1 163
    Par défaut passage variable dans un select
    OK,

    Pour simplifier tu pourrais t'intéresser aux fonctions de domaine avec une syntaxe ci-après beaucoup plus simple:

    maVariable (ou monChamp) = DLookup("champ","Table","Condition")

    ici, çà donnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    leLibelle=DLookUp("libelle","t_ref_secssact","pk_secact_code=" & v_pk_secact)

  18. #18
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    - que ce passe-t-il lorsque tu compiles ton code ? (c'est d'ailleurs, plutôt une vérification de la syntaxe qu'une vraie compilation)

    Nom : vba_CompilerCode.JPG
Affichages : 161
Taille : 21,7 Ko

    - il est conseillé de toujours mettre Me. devant les contrôles du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.v_pk_secact = CLng(fk_secact_code.Column(1))
    Me.Texte90 = v_pk_secact
    - pourquoi n'y a t-il pas code après cette ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set req_liste_secssact = req.OpenRecordset("SELECT libelle, pk_secssact_code  FROM t_ref_secssact WHERE pk_secact_code=" & v_pk_secact, dbOpenDynaset)

  19. #19
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    il ne se passe rien avec la compilation

    le v_secact_code n'est pas un champ dans mon formulaire, elle ce trouve dans un Dim

    il n'y a rien dérrière puisque j'ai une erreur "trop peu de paramètre 1 attendu...

    je vais essayer le code plus haut...

  20. #20
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 36
    Points : 11
    Points
    11
    Par défaut
    alors j'ai essayé ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_secssact = DLookup("libelle", "t_ref_secssact", "pk_secact_code=" & v_pk_secact)
    marche pas non plus, erreur d'execution 2471

    j'ai essayer aussi en remplaçant & v_pk_secact par Me.Texte90 et j'ai la même erreur...

    je continue de bidouiller...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. bean:define pour passage variable dans function javascript
    Par fbuchwalder dans le forum Struts 1
    Réponses: 2
    Dernier message: 06/11/2006, 19h36
  2. [PL/SQL] utilisation de variables dans un select?
    Par Dr Kraft dans le forum SQL
    Réponses: 8
    Dernier message: 11/10/2006, 11h17
  3. pb : VIEW avec variable dans le select
    Par seb.briet dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 13/05/2006, 02h57
  4. récupérer une variable dans un select case
    Par rob2-9 dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 23/12/2005, 11h54
  5. Pl/SQL utilisation d'une variable dans un select
    Par larg dans le forum PL/SQL
    Réponses: 17
    Dernier message: 30/11/2004, 18h08

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