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

VB 6 et antérieur Discussion :

RecordSet avec donnée variable


Sujet :

VB 6 et antérieur

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut RecordSet avec donnée variable
    J’ai plusieurs tables liées entre elles. Je souhaite extraire de ces tables l’ensembles des enregistrement qui on une certaine valeur pour le champ Nom.
    Par exemple tout les enreg où Nom = « XXX »
    Jusque là pas de problème.
    Là où sa se complique c’est que je souhaite le faire dans un recordset et qu’en plus la valeur recherché pour le champs nom est variable. Ca peut être n’importe quel nom de ma base.
    Le nom recherché provient du comboBox d’un formulaire.
    Voici comment j’ai résonné :
    Je mets le nom existant dans le combox box dans une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VarStrg = Combo.value ‘un truc dans cet esprit
    Ensuite j’ouvre le rst de la maniere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rst.open  "select from etc where ChpNom = " & VarStrg & "le reste de la requête SQL"
    Ceci ne marche pas. J’ai l’impression que la valeur de VarStrg est de la forme "leNom" or les doubles cotes dans la requête SQL ne sont pas acceptées par VB.
    En gros la question est comment créer un recordset qui filtre une ou plusieurs tables liées sur une valeur variable (je ne sais pas si on parle dans ce cas de requête SQL dynamique).

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    As-tu essaiyé de mettre ["select from etc where ChpNom = " & VarStrg & "le reste de la requête SQL"] dans une variable ?

    (Juste parce que tu attends depuis plus d'une heure...)

    A+

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par ouskel'n'or
    As-tu essaiyé de mettre ["select from etc where ChpNom = " & VarStrg & "le reste de la requête SQL"] dans une variable ?

    (Juste parce que tu attends depuis plus d'une heure...)

    A+
    Non, mais je ne suis pas bien sûr de voir en koi ca changerai qque chose.
    Tu peux expliquer?

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    C'est juste à cause de ça

    J’ai l’impression que la valeur de VarStrg est de la forme "leNom" or les doubles cotes dans la requête SQL ne sont pas acceptées par VB
    Si tu mets ta ligne dans une variable, tu seras sûr de la syntaxe...

    C'était juste une idée comme ça...

    A+

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Dans un module, ajoute la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function fzA(ByVal pvValeur As Variant) As String
    'fzA = Format Zone Alpha
       Dim lniPos  As Integer
     
       lniPos = 1
       Do Until InStr(lniPos, pvValeur, "'") = 0
          lniPos = InStr(lniPos, pvValeur, "'")
          pvValeur = Left(pvValeur, lniPos) & "'" & Mid(pvValeur, lniPos + 1)
          lniPos = lniPos + 2
       Loop
       fzA = "'" & pvValeur & "'"
     
    End Function
    Cette fonction fait les choses suivantes :
    - dédoublement des quotes incluses dans la chaîne,
    - encadrement de cette chaîne par des quotes.

    Puis écris ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM etc where ChpNom = " & fza(VarStrg) & " WHERE ..."

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Xo
    Dans un module, ajoute la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function fzA(ByVal pvValeur As Variant) As String
    'fzA = Format Zone Alpha
       Dim lniPos  As Integer
     
       lniPos = 1
       Do Until InStr(lniPos, pvValeur, "'") = 0
          lniPos = InStr(lniPos, pvValeur, "'")
          pvValeur = Left(pvValeur, lniPos) & "'" & Mid(pvValeur, lniPos + 1)
          lniPos = lniPos + 2
       Loop
       fzA = "'" & pvValeur & "'"
     
    End Function
    Cette fonction fait les choses suivantes :
    - dédoublement des quotes incluses dans la chaîne,
    - encadrement de cette chaîne par des quotes.

    Puis écris ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM etc where ChpNom = " & fza(VarStrg) & " WHERE ..."
    Qd tu dis "dedoublement" des quotes, tu veux dire retirer les quotes?
    Dans ce cas c'est effectivement ce que je recherche à faire.
    Je teste et je vous tiens au courant.

  7. #7
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par Chris094
    Qd tu dis "dedoublement" des quotes, tu veux dire retirer les quotes?
    Non, dédoublement = multiplication par 2

    Si tu veux visualiser les quotes saisies, c'est ainsi que tu dois procéder. Il me paraît difficile d'expliquer à l'utilisateur qu'il ne pourra pas saisir/visualiser de quotes (ie apostrophe) dans un nom de famille ...

    Par exemple, si tu recherches une personne s'appelant De l'Air, ta requête s'écrira :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id FROM Personne WHERE nom = 'De l''Air'

  8. #8
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    je ne sais pas si j'ai bien compris ta question mais arrete moi si je me trompe.

    Je croit que tu as ecrit ta requette et quelle ne s'execute pas. Si c'est le cas alors c'est tout a fait normal car ta requette a ete mal ecrite. Voila une requette qui je croit devrais marche.

    a lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Rst.open  "select from etc where ChpNom = " & VarStrg & "le reste de la requête SQL"
    tape plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Rst.open  "select from etc where ChpNom = ' " & VarStrg & " ' le reste de la requête SQL"
    on ne peut pas doubler les doubles cotes donc ce qu'on fait c'est que on commence par les simples cotes et les doubles cotes apres.

    bonne chance pour la suite.

  9. #9
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rst.open  "select from etc where ChpNom = " & Chr(34) & Replace( VarStrg,chr(34),chr(34) & Chr(34)) & Chr(34)  & "le reste de la requête SQL"

  10. #10
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Allez, je m'y mets aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if InStr(VarString, "'") > 0 then
       txtSql = "select ... from MaTable where ChNom = '" & Replace(VarString, "'", "''") & "'"
    end if
     
    if InStr(VarString, """) > 0 then
       txtSql = "select ... from MaTable where ChNom = '" & Replace(VarString, "'", """") & "'"
    end if

  11. #11
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Oui, ça commence à faire pas mal de réponses

    pc75, Tofalu et sovo, pourquoi dédoublez-vous les doubles quotes ? C'est du à un SGBD particulier ? Access ? Sous Oracle, je ne m'occupe que des quotes simples. C'est d'ailleurs du SQL, ce n'est pas lié à un SGBD particulier.

  12. #12
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    En ce qui me concerne c'est de cette facon que j'ecris mes requettes et jusqu'aujourd'hui elle marche impect, lorsque je ne l'ecrit pas comme cela elles ne marche pas.

    PS: j'utilise ACCES et SQL serveur 2000.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 49
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Xo
    Oui, ça commence à faire pas mal de réponses

    pc75, Tofalu et sovo, pourquoi dédoublez-vous les doubles quotes ? C'est du à un SGBD particulier ? Access ? Sous Oracle, je ne m'occupe que des quotes simples. C'est d'ailleurs du SQL, ce n'est pas lié à un SGBD particulier.
    SQL serveur , oblige le doublement des quotes..sinon ça plante, car c'est le délimiteur de chaine de caractère.....

    donc ok pour les dernières reuqêtes données...
    Mais pour commencer , je conseillerais à chris094 de faire un MsgBox de sa requête..voir si la syntaxe est correcte , et vérifier que son VarStrg contient une valeur correcte.

Discussions similaires

  1. [XL-2007] Ecrire une formule avec données variables via "FormulaR1C1 "
    Par electrons dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 11/02/2014, 15h09
  2. [XSL-FO] Footer avec données variables
    Par PouetteMan dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 25/01/2012, 17h20
  3. Envoi d'un mail mis en forme avec données variables
    Par eti_lac dans le forum VBA Access
    Réponses: 1
    Dernier message: 21/11/2007, 15h53
  4. [VBA-E] Requète SQL avec chemin de base de données variable
    Par Svart26 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/05/2006, 13h29
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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