Set Rs = Me.Recordset.Clone et apostrophe

Le
Mission
Bonjour tout le monde,
Sur Access2000, j'utilise une procédure honteusement pompée sur le site d'un
des contributeurs (je ne sais plus lequel, je les drague tous.) qui me
permet de choisir une fiche à l'aide d'un contrôle indépendant :
Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = '" & Me.[lstClients] & "'"
Me.Bookmark = Rs.Bookmark
End Sub

Si le nom choisi dans la liste déroulante comporte une apostrophe, j'ai une
injure-box 3077 (erreur de syntaxe - opérateur absent dans l'expression) et
le débogage pointe sur la ligne Rs.FindFirst.
Comment puis-je contourner ce problème, car les apostrophes ne sont pas des
exceptions dans les noms propres.
Et je ne suis pas sûr que dépasser l'erreur soit une solution acceptable.
Merci d'avance pour votre aide.
Cordialement

PG
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jessy Sempere
Le #6225761
Bonjour

Remplaces ton code par :

Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = """ & Me.[lstClients] & """"
Me.Bookmark = Rs.Bookmark
End Sub
--
@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour tout le monde,
Sur Access2000, j'utilise une procédure honteusement pompée sur le site d'un
des contributeurs (je ne sais plus lequel, je les drague tous....) qui me
permet de choisir une fiche à l'aide d'un contrôle indépendant :
Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = '" & Me.[lstClients] & "'"
Me.Bookmark = Rs.Bookmark
End Sub

Si le nom choisi dans la liste déroulante comporte une apostrophe, j'ai une
injure-box 3077 (erreur de syntaxe - opérateur absent dans l'expression) et
le débogage pointe sur la ligne Rs.FindFirst....
Comment puis-je contourner ce problème, car les apostrophes ne sont pas des
exceptions dans les noms propres.
Et je ne suis pas sûr que dépasser l'erreur soit une solution acceptable.
Merci d'avance pour votre aide.
Cordialement

PG




Gilles MOUGNOZ
Le #6225741
Bonjour, Mission
Pour qu'apostrophes et guillemets soient reconnus en tant que tels dans une
instruction SQL, il faut les doubler.
Tu peux utiliser la fonction Replace pour cela (je crois qu'elle existe
depuis la version 2000). Voila ce que ça donne:
Replace(Me.[lstClients],"'","''")
Comme on ne voit pas très bien, la même avec des espaces en plus (uniquement
pour comprendre le principe!):
Replace(Me.[lstClients]," ' "," ' ' ")
Pour le guillemet, c'est pire puisque c'est aussi le caractère délimiteur de
chaîne de VBA. Il faut utiliser une instruction du genre:
Replace(TaChaine,"""","""""")
C'est mieux ?
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
Bonjour tout le monde,
Sur Access2000, j'utilise une procédure honteusement pompée sur le site
d'un des contributeurs (je ne sais plus lequel, je les drague tous....)
qui me permet de choisir une fiche à l'aide d'un contrôle indépendant :
Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = '" & Me.[lstClients] & "'"
Me.Bookmark = Rs.Bookmark
End Sub

Si le nom choisi dans la liste déroulante comporte une apostrophe, j'ai
une injure-box 3077 (erreur de syntaxe - opérateur absent dans
l'expression) et le débogage pointe sur la ligne Rs.FindFirst....
Comment puis-je contourner ce problème, car les apostrophes ne sont pas
des exceptions dans les noms propres.
Et je ne suis pas sûr que dépasser l'erreur soit une solution acceptable.
Merci d'avance pour votre aide.
Cordialement

PG



ze Titi
Le #6225731
Hello Gilles !

Je me permets d'ajouter que, pour rendre le code plus compréhensible et
afin de ne pas se perdre dans les guillemets, on peut utiliser
Chr(34) à la place du doublage de guillemets.

En ce jour mémorable du mercredi 04/04/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour, Mission
Pour qu'apostrophes et guillemets soient reconnus en tant que tels dans une
instruction SQL, il faut les doubler.
Tu peux utiliser la fonction Replace pour cela (je crois qu'elle existe
depuis la version 2000). Voila ce que ça donne:
Replace(Me.[lstClients],"'","''")
Comme on ne voit pas très bien, la même avec des espaces en plus (uniquement
pour comprendre le principe!):
Replace(Me.[lstClients]," ' "," ' ' ")
Pour le guillemet, c'est pire puisque c'est aussi le caractère délimiteur de
chaîne de VBA. Il faut utiliser une instruction du genre:
Replace(TaChaine,"""","""""")
C'est mieux ?
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
Bonjour tout le monde,
Sur Access2000, j'utilise une procédure honteusement pompée sur le site
d'un des contributeurs (je ne sais plus lequel, je les drague tous....) qui
me permet de choisir une fiche à l'aide d'un contrôle indépendant :
Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = '" & Me.[lstClients] & "'"
Me.Bookmark = Rs.Bookmark
End Sub

Si le nom choisi dans la liste déroulante comporte une apostrophe, j'ai une
injure-box 3077 (erreur de syntaxe - opérateur absent dans l'expression) et
le débogage pointe sur la ligne Rs.FindFirst....
Comment puis-je contourner ce problème, car les apostrophes ne sont pas des
exceptions dans les noms propres.
Et je ne suis pas sûr que dépasser l'erreur soit une solution acceptable.
Merci d'avance pour votre aide.
Cordialement

PG




--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info


Mission
Le #6225711
Merci à tous les 3 (Jessy, Giles et ze Titi),
La formule de Jessy répond parfaitement à mon problème.
Je note donc dans un petit coin de mon neurone le triplement des ".
Merci encore à vous trois pour votre aimable contribution.
Cordialement.
PG

"Jessy Sempere" news:
Bonjour

Remplaces ton code par :

Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = """ & Me.[lstClients] & """"
Me.Bookmark = Rs.Bookmark
End Sub
--
@+
Jessy Sempere
------------------------------------
Site @ccess : http://access.fr.free.fr/
Pour l''''efficacité de tous :
http://www.mpfa.info/
------------------------------------



Bonjour tout le monde,
Sur Access2000, j'utilise une procédure honteusement pompée sur le site
d'un
des contributeurs (je ne sais plus lequel, je les drague tous....) qui me
permet de choisir une fiche à l'aide d'un contrôle indépendant :
Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = '" & Me.[lstClients] & "'"
Me.Bookmark = Rs.Bookmark
End Sub

Si le nom choisi dans la liste déroulante comporte une apostrophe, j'ai
une
injure-box 3077 (erreur de syntaxe - opérateur absent dans l'expression)
et
le débogage pointe sur la ligne Rs.FindFirst....
Comment puis-je contourner ce problème, car les apostrophes ne sont pas
des
exceptions dans les noms propres.
Et je ne suis pas sûr que dépasser l'erreur soit une solution acceptable.
Merci d'avance pour votre aide.
Cordialement

PG






Gilles MOUGNOZ
Le #6225671
Salut, Ze Titi
... et taper sept caractères au lieu de deux ?! (sans compter les &)
C'est trop de boulot pour mes petits doigts...;-)
En plus, je serais bien capable de me tromper de code :-(
Plus sérieusement, même si la fonction Chr ne doit pas être celle qui
consomme le plus de ressource, elle n'en reste pas moins une fonction.
Insérée dans une boucle, elle peut contribuer à ralentir le traitement.
Alors, oui à la lisibilité du code mais plutôt grâce aux commentaires. Ceci
dit, dans une instruction ponctuelle, je n'ai rien contre !
Toujours est-il que, quand on se lance dans une écriture un peu compliquée,
il faut un minimum de concentration, comme c'est le cas pour écrire du SQL
dans le code (voir le fil initié par Gundt le 2 avril).
Pour finir, je ne dirai pas que je n'utiliserai pas Chr(34), surtout si tu
as d'autres arguments à mettre à son crédit. Quand je vois comment je codais
il y a 5 ans et comment je code maintenant...
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
Hello Gilles !

Je me permets d'ajouter que, pour rendre le code plus compréhensible et
afin de ne pas se perdre dans les guillemets, on peut utiliser
Chr(34) à la place du doublage de guillemets.

En ce jour mémorable du mercredi 04/04/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour, Mission
Pour qu'apostrophes et guillemets soient reconnus en tant que tels dans
une instruction SQL, il faut les doubler.
Tu peux utiliser la fonction Replace pour cela (je crois qu'elle existe
depuis la version 2000). Voila ce que ça donne:
Replace(Me.[lstClients],"'","''")
Comme on ne voit pas très bien, la même avec des espaces en plus
(uniquement pour comprendre le principe!):
Replace(Me.[lstClients]," ' "," ' ' ")
Pour le guillemet, c'est pire puisque c'est aussi le caractère délimiteur
de chaîne de VBA. Il faut utiliser une instruction du genre:
Replace(TaChaine,"""","""""")
C'est mieux ?
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
Bonjour tout le monde,
Sur Access2000, j'utilise une procédure honteusement pompée sur le site
d'un des contributeurs (je ne sais plus lequel, je les drague tous....)
qui me permet de choisir une fiche à l'aide d'un contrôle indépendant :
Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = '" & Me.[lstClients] & "'"
Me.Bookmark = Rs.Bookmark
End Sub

Si le nom choisi dans la liste déroulante comporte une apostrophe, j'ai
une injure-box 3077 (erreur de syntaxe - opérateur absent dans
l'expression) et le débogage pointe sur la ligne Rs.FindFirst....
Comment puis-je contourner ce problème, car les apostrophes ne sont pas
des exceptions dans les noms propres.
Et je ne suis pas sûr que dépasser l'erreur soit une solution
acceptable.
Merci d'avance pour votre aide.
Cordialement

PG




--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info






ze Titi
Le #6225661
A priori, ton argumentation est excellente. Je n'ai pas d'arguments à y
opposer. Personnellement, j'utilise beaucoup ce code, j'ai trop galéré
à savoir où j'en étais avec mes guillemets pour me passer de ce truc.
Avec les machines que j'utilise actuellement, le ralentissement causé
par cette fonction est infime et je ne vois pas pourquoi je m'en
priverais... ;-)
En tout cas, je suis d'accord pour dire que chacun code comme il veut
et qu'avec l'expérience, les habitudes ont la vie dure ! :-))

Bonne continuation à toi aussi !

Dans ton message
Salut, Ze Titi
... et taper sept caractères au lieu de deux ?! (sans compter les &)
C'est trop de boulot pour mes petits doigts...;-)
En plus, je serais bien capable de me tromper de code :-(
Plus sérieusement, même si la fonction Chr ne doit pas être celle qui
consomme le plus de ressource, elle n'en reste pas moins une fonction.
Insérée dans une boucle, elle peut contribuer à ralentir le traitement.
Alors, oui à la lisibilité du code mais plutôt grâce aux commentaires. Ceci
dit, dans une instruction ponctuelle, je n'ai rien contre !
Toujours est-il que, quand on se lance dans une écriture un peu compliquée,
il faut un minimum de concentration, comme c'est le cas pour écrire du SQL
dans le code (voir le fil initié par Gundt le 2 avril).
Pour finir, je ne dirai pas que je n'utiliserai pas Chr(34), surtout si tu as
d'autres arguments à mettre à son crédit. Quand je vois comment je codais il
y a 5 ans et comment je code maintenant...
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
Hello Gilles !

Je me permets d'ajouter que, pour rendre le code plus compréhensible et
afin de ne pas se perdre dans les guillemets, on peut utiliser
Chr(34) à la place du doublage de guillemets.

En ce jour mémorable du mercredi 04/04/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour, Mission
Pour qu'apostrophes et guillemets soient reconnus en tant que tels dans
une instruction SQL, il faut les doubler.
Tu peux utiliser la fonction Replace pour cela (je crois qu'elle existe
depuis la version 2000). Voila ce que ça donne:
Replace(Me.[lstClients],"'","''")
Comme on ne voit pas très bien, la même avec des espaces en plus
(uniquement pour comprendre le principe!):
Replace(Me.[lstClients]," ' "," ' ' ")
Pour le guillemet, c'est pire puisque c'est aussi le caractère délimiteur
de chaîne de VBA. Il faut utiliser une instruction du genre:
Replace(TaChaine,"""","""""")
C'est mieux ?
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
Bonjour tout le monde,
Sur Access2000, j'utilise une procédure honteusement pompée sur le site
d'un des contributeurs (je ne sais plus lequel, je les drague tous....)
qui me permet de choisir une fiche à l'aide d'un contrôle indépendant :
Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = '" & Me.[lstClients] & "'"
Me.Bookmark = Rs.Bookmark
End Sub

Si le nom choisi dans la liste déroulante comporte une apostrophe, j'ai
une injure-box 3077 (erreur de syntaxe - opérateur absent dans
l'expression) et le débogage pointe sur la ligne Rs.FindFirst....
Comment puis-je contourner ce problème, car les apostrophes ne sont pas
des exceptions dans les noms propres.
Et je ne suis pas sûr que dépasser l'erreur soit une solution acceptable.
Merci d'avance pour votre aide.
Cordialement

PG




-- Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info





--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info




Pierre CFI [mvp]
Le #6225621
et que tu coderas dans 5 autres années :o))
c'est curieux quand on démarre un prog assez long (plusieurs semaines avec
les modifs clients)
au début, nikel, bien renseugné, des noms de variables causant, puis au fur
et à mesure...... (moi, tout au moins)
cela dit mon fils qui lui est ingénieur, chef de projet gros sytéme, me dit
"le code doit étre clair, sauf pour un éventuel concurrent" je suis rassuré

--
Pierre
MVP Access
***************************************
Conseils MPFA: http://www.mpfa.info/
*********************************************************
"Gilles MOUGNOZ" news:
Salut, Ze Titi
... et taper sept caractères au lieu de deux ?! (sans compter les &)
C'est trop de boulot pour mes petits doigts...;-)
En plus, je serais bien capable de me tromper de code :-(
Plus sérieusement, même si la fonction Chr ne doit pas être celle qui
consomme le plus de ressource, elle n'en reste pas moins une fonction.
Insérée dans une boucle, elle peut contribuer à ralentir le traitement.
Alors, oui à la lisibilité du code mais plutôt grâce aux commentaires.
Ceci dit, dans une instruction ponctuelle, je n'ai rien contre !
Toujours est-il que, quand on se lance dans une écriture un peu
compliquée, il faut un minimum de concentration, comme c'est le cas pour
écrire du SQL dans le code (voir le fil initié par Gundt le 2 avril).
Pour finir, je ne dirai pas que je n'utiliserai pas Chr(34), surtout si tu
as d'autres arguments à mettre à son crédit. Quand je vois comment je
codais il y a 5 ans et comment je code maintenant...
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
Hello Gilles !

Je me permets d'ajouter que, pour rendre le code plus compréhensible et
afin de ne pas se perdre dans les guillemets, on peut utiliser
Chr(34) à la place du doublage de guillemets.

En ce jour mémorable du mercredi 04/04/2007, tu as entrepris la lourde
tâche de taper sur ton clavier :
Bonjour, Mission
Pour qu'apostrophes et guillemets soient reconnus en tant que tels dans
une instruction SQL, il faut les doubler.
Tu peux utiliser la fonction Replace pour cela (je crois qu'elle existe
depuis la version 2000). Voila ce que ça donne:
Replace(Me.[lstClients],"'","''")
Comme on ne voit pas très bien, la même avec des espaces en plus
(uniquement pour comprendre le principe!):
Replace(Me.[lstClients]," ' "," ' ' ")
Pour le guillemet, c'est pire puisque c'est aussi le caractère
délimiteur de chaîne de VBA. Il faut utiliser une instruction du genre:
Replace(TaChaine,"""","""""")
C'est mieux ?
--
Bonne continuation
-------------------------------------------------------------------------------------------
http://www.mpfa.info : c'est bonheur pour ton ordinateur !
-------------------------------------------------------------------------------------------
Bonjour tout le monde,
Sur Access2000, j'utilise une procédure honteusement pompée sur le site
d'un des contributeurs (je ne sais plus lequel, je les drague tous....)
qui me permet de choisir une fiche à l'aide d'un contrôle indépendant :
Private Sub lstClients_AfterUpdate()
If Me.lstClients = Null Then Exit Sub
Dim Rs As Object
Set Rs = Me.Recordset.Clone
Rs.FindFirst "[Client] = '" & Me.[lstClients] & "'"
Me.Bookmark = Rs.Bookmark
End Sub

Si le nom choisi dans la liste déroulante comporte une apostrophe, j'ai
une injure-box 3077 (erreur de syntaxe - opérateur absent dans
l'expression) et le débogage pointe sur la ligne Rs.FindFirst....
Comment puis-je contourner ce problème, car les apostrophes ne sont pas
des exceptions dans les noms propres.
Et je ne suis pas sûr que dépasser l'erreur soit une solution
acceptable.
Merci d'avance pour votre aide.
Cordialement

PG




--
Cordialement,
Ze Titi

Tout pour réussir avec Access :
http://www.mpfa.info










Publicité
Poster une réponse
Anonyme