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

VBScript Discussion :

Erreur SELECT Sql sur base Access


Sujet :

VBScript

  1. #1
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 380
    Points : 247
    Points
    247
    Par défaut Erreur SELECT Sql sur base Access
    Bonjour
    Je rencontre une erreur lorsque je mets le critère de recherche entre double cotes.
    Pourtant sous Access ce type de requête est valide.
    Voici le message :


    http://cjoint.com/?DCCj5BhRiEH
    Images attachées Images attachées  
    Windows 10
    Microsoft Edge (64 bits)
    Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 184
    Points
    17 184
    Par défaut
    Salut
    Les quelques lignes de code et surtout la ligne de ta requête SQL sont un minimum pour pouvoir t'aider.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 380
    Points : 247
    Points
    247
    Par défaut
    Voila le code complet:
    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
    30
    31
    32
    33
    34
    35
    36
     
    option explicit
    dim oShell, pw , connstring  , rs
    dim 	sql,    srv    ,i, cles, dico
    dim q
            const adob   = "ADODB.RecordSet"
            const  mdb   = "Mesclés.mdb"
               Set dico  = CreateObject("Scripting.Dictionary")
               Set   Rs  = CreateObject(adob)
               Set oShell= createObject("Wscript.shell")
                      pw =  oShell.RegRead("HKEY_CURRENT_USER\S\P\pwa")
               Set oShell= nothing
            connstring   ="DRIVER={Microsoft Access Driver (*.mdb)};" & _
                          "User Id=admin;Password=" & pw & ";DBQ=" & mdb
     
      sql = "SELECT Services FROM Klés;"
            Rs.open sql , connstring
           do while not rs.eof
            srv=rs(0)
            dico.add srv,""
            rs.movenext
           loop
            rs.close
     
            cles=dico.keys
    on error resume next
    For i=0 To ubound(cles)
            srv=cles(i)
            if instr(1,srv,"'")>0 then q=chr(34) else q="'"
      sql = "SELECT count(*) FROM Klés WHERE Services="&q& srv &q
            Rs.open sql , connstring
            if err.number<>0 then msgbox err.description,, sql else rs.close
               err.number=0
     next
           msgbox "fin"
            wscript.quit
    Windows 10
    Microsoft Edge (64 bits)
    Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)

  4. #4
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 077
    Points : 17 184
    Points
    17 184
    Par défaut
    Remplacer ligne 29 if instr(1,srv,"'")>0 then q=chr(34) else q="'" par srv = Replace(srv, "'", "''")

    la Ligne 30 devient sql = "SELECT count(*) FROM Klés WHERE Services='" & srv & "'"

    Retour d'expérience ressent:
    Une habitude à conserver même si cela n'est aujourd'hui plus une obligation, pour les noms de BDs, de Tables ainsi que des Champs, ne pas utiliser de caractères accentués ni de signes exotiques de style / ou ~ ...
    Pourquoi j'insiste sur cette aspect, une personne voulant t'aider, un client, un ami auquel tu voudrais donner ta BDs, ..... n'aura pas forcement le système acceptant ces caractères.
    Dernièrement j'ai dû reprendre un code pendant plus de 2 heures pour traiter ce genre de problème.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 380
    Points : 247
    Points
    247
    Par défaut
    Bonjour
    je comprends bien ce problème, mais dans mon cas il s'agit de noms de site sur internet et certains comportent des apostrophes comme celui de mon exemple ou encore, celui de Malwarebytes ("Malwarebytes's") et d'autres sans doute...
    Je constate que le VBS ne traite pas ces cas avec le Sql.
    Merci pour votre intervention.
    Windows 10
    Microsoft Edge (64 bits)
    Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)

  6. #6
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je ne crois pas votre diagnostic est le bon. Le problème provient plutôt de cette ligne :
    D'ailleurs je suis surpris que vous n'aviez pas capturer l'erreur à temps d'exécution si c'etait pas proprement en ce qui concerne la capturation d'erreurs.

    Deux alternatifs. Soit vous faites comme ça remplaçant la ligne desus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if not dico.exists(srv) then
        dico.add srv, ""
    end if
    Soit vous réecrivez la ligne sql comme ça et gardez la ligne desus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'sql = "SELECT Services FROM Klés;"
    sql = "SELECT DISTINCT Services FROM Klés;"
    L'un ou l'autre.

    Faites correctement comme cela, il n'y a pas de cause pour la directive et la construction d''on error resume next" dessous.

  7. #7
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 380
    Points : 247
    Points
    247
    Par défaut
    C'est sympa de vous intéresser, mais le problème n'est pas là ou vous le croyez.
    La gestion du dictionnaire fonctionne parfaitement.
    Windows 10
    Microsoft Edge (64 bits)
    Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)

  8. #8
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    La gestion du dictionnaire fonctionne parfaitement.
    C'est possible mais seulement sous la condition que les entrées du champ Services soient déjà uniques - ce qui est une circonstance très très particulière. En tout cas, c'est tout à fait nécessaire de controller existence avant de faire ajouter une clé dans un objet dictionnaire.

    Mais je dirais que vous n'avez raison aussi et c'est vrai. J'ai regardé de plus près le problème de sql. La raison est le fournisseur ou ce qui reflète dans le "connection string". Celui de Microsoft Access Driver est la source de problème et il ne supporte pas l'utilisation de double-quote hors standard. En tout cas, c'est l'engin Jet que moi et les autres, je pense, l'utilise plus souvent. Il supporte bien ce que vous voulez faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'connstring   ="DRIVER={Microsoft Access Driver (*.mdb)};" & _
    '    "User Id=admin;Password=" & pw & ";DBQ=" & mdb
    'Sous la condition de la securité standardisée
    connstring="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mdb    '& ";User Id=admin;Password=;"
    Avec Jet.OLEDB, le problème s'en va.

  9. #9
    Membre actif
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2011
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 380
    Points : 247
    Points
    247
    Par défaut
    Je viens de faire l'essai avec "jet", mais j'ai l'erreur suivante :
    "Impossible de démarrer votre application. Le fichier d'information du groupe de travail est absent ou ouvert en mode exclusif par un autre utilisateur"

    Il y-avait erreur sur la syntaxe. Après correction de ce qui suit, cela fonctionne comme vous l'avez indiqué.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       connstring="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mdb & _
                  ";Jet OLEDB:Database Password=" & pw &";"
    Merci
    Windows 10
    Microsoft Edge (64 bits)
    Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)

  10. #10
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    C'est entendu bien. Chacun doit modifier la partie du texte de connexion d'après la configuration de sécurité de son système et de sa base de données. Et vous l'avez bien faites, et c'est ce qui compte.

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

Discussions similaires

  1. [Débutant] Problème syntaxe select from where sur base access
    Par IL-MAFIOSO dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/06/2012, 17h27
  2. requête SQL sur base access
    Par pppa1 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/04/2011, 18h21
  3. requête SQL sur base access
    Par pppa1 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/03/2011, 08h19
  4. [ODBC] Select limité sur base access
    Par max-mag dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 08/08/2008, 16h41
  5. requete sql de recherche sur base access
    Par donhatem dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/07/2008, 23h05

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