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
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
Windows 10
Microsoft Edge (64 bits)
Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)
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 ← ← 👈
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)
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 ← ← 👈
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)
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part dico.add srv,""
Deux alternatifs. Soit vous faites comme ça remplaçant la ligne desus :
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
3 if not dico.exists(srv) then dico.add srv, "" end if
L'un ou l'autre.
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;"
Faites correctement comme cela, il n'y a pas de cause pour la directive et la construction d''on error resume next" dessous.
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)
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.La gestion du dictionnaire fonctionne parfaitement.
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.
Avec Jet.OLEDB, le problème s'en va.
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=;"
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é.
Merci
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 &";"
Windows 10
Microsoft Edge (64 bits)
Google Chrome Version 67.0.3396.99 (Build officiel) (64 bits)
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager