Problème de fonction Replace (?)

Résolu
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 - 21 mai 2007 à 10:09
ObelixSuisse Messages postés 15 Date d'inscription lundi 9 mai 2005 Statut Membre Dernière intervention 26 mai 2010 - 26 mai 2010 à 10:50
J'ai un projet VB, avec un module regroupant toutes mes requêtes SQL. Ok ?
J'ai une requête dans laquelle il y a l'utilisation de la fonction "replace"...
Mon problème est que pour utiliser la fonction "replace" je suis obligé de mettre des guillement se qui pose un problème pour executer la requête. On ma proposé de mettre 2 guillemets à la suite, ok, mais il me renvoi l'erreur suivante "Fonction replace non définie dans l'expression".

Voici le code :
Requete = "SELECT sum(cint(replace(part, ""."", "","")))," _
                & " sum(cint(replace(abbpa, ""."", "","")))," _
                & " sum(cint(replace(mtnvv, ""."", "","")))," _
                & " sum(cint(replace(abnvv, ""."", "","")))," _
                & " sum(cint(replace(mtnin, ""."", "","")))," _
                & " sum(cint(replace(abnin, ""."", "",""))) from" _
                & " versement_ventilations where" _
                & " (ind = '" & SiretClient & "' and cint(fonds) in" _
                & " (select distinct cint(num_fond) from fonds where" _
                & " designation = '" & NumFond & "'))"
               
Rst.open Requete, BaseConnect, adOpenStatic, adLockReadOnly

Quelqu'un pourrait-il m'aider ?
A voir également:

19 réponses

antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 11:05
j'effectue un replace car mon séparateur de décimal pour un nombre est la virgule. J'ai donc changé dans mes paramètres régionaux le séparateur de décimal en "point" et désormais ça fonctionne sans le "replace", je vais donc opter pour cette solution, en supprimant le "replace". Mais j'espère ne pas devoir changer le séparateur décimal en "point" pour tous les utilisateurs.
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mai 2007 à 10:13
Salut,
Et ceci:
Requete = "SELECT sum(" & CInt(Replace(part, ".", ",")) & ")," _
               & " sum(" & CInt(Replace(abbpa, ".", ",")) & ")," _
               & " sum(" & CInt(Replace(mtnvv, ".", ",")) & ")," _
               & " sum(" & CInt(Replace(abnvv, ".", ",")) & ")," _
               & " sum(" & CInt(Replace(mtnin, ".", ",")) & ")," _
               & " sum(" & CInt(Replace(abnin, ".", ",")) & ") from" _
               & " versement_ventilations where" _
               & " (ind = '" & SiretClient & "' and cint(fonds) in" _
               & " (select distinct cint(num_fond) from fonds where" _
               & " designation = '" & NumFond & "   ", ----
[code.aspx?ID=41455 By Renfield]

Si cela ne fonctionne pas il faudrait que nous sachions ce que contiennent et d'ou viennent les variables part, abbpa, ....

Une autre solution serait de nous dire aussi ce que tu souhaites que fasse ta requete.

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mai 2007 à 10:14
Salut,
Ah tiens les deux dernieres parenthèses ont été bouffées.

@+: Ju£i?n
Pensez: Réponse acceptée
0
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 10:16
un grand merci, je teste et je "valide" ta réponse... les variables part, abbpa...etc... sont des champs de la table "versement_ventilations" d'une base access.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 10:20
je m'apperçois que ta question était très pertinante car l'erreur suivante se produit : "Variable non définie" ---> part
 tu aurais une piste de résolution ?
0
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 10:24
pour info
: chaque champ (part, abbpa...) est de type "texte" dans access. Cette requête doit rendre la somme de chaque champ. Pour cela, je remplace les points par des virgules (REPLACE), et je converse en "integer" (CINT), et je fais la somme (SUM).
La requête, testée sous Access, fonctionne très bien, seul soucis : les guillemets sous VB, concernant la fonction Replace.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mai 2007 à 10:25
Salut,
Effectivement si ce sont des champs de la base, il faut donc voir si CINT, et replace sont des fonctions acceptées pour une requete SQL puisque c'est là que se trouve ton problème et non dans VB.

Si je ne me trompe pas tu souhaites faire des Sommes de champs et remplacer le point par une virgule c'est ca?

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mai 2007 à 10:26
OUps post croisé désolé.

@+: Ju£i?n
Pensez: Réponse acceptée
0
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 10:29
oui, c'est ça... dans le cas présent, les fonctions CInt et Replace sont bien supportées par SQL car j'ai testé dans Access et ça tourne bien. Mon problème "réel" est d'ouvrir les guillemets de la fonction Replace, sans "couper" la chaine de caractère de la variable Requete. On m'avait dit de mettre 2 guillemets à la suite mais l'erreur "Fonction replace non définie dans l'expression" est rendue.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mai 2007 à 10:33
Salut,
le second problème que tu as c'est que CINT te retournant la partie entiere, pourquoi effectuer un replace???

@+: Ju£i?n
Pensez: Réponse acceptée
0
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 10:37
...parceque le caractère "point" n'est pas convertissable en "integer".
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mai 2007 à 10:41
Re,
J'ai pourtant testé cette requête SQL dans ACCESS et cela me donne le même résultat avec et sans replace.
SELECT Sum(CInt(part)) AS Expr1, Sum(CInt(abbpa)) AS Expr2 FROM versement_ventilations;, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
0
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 10:52
SELECT sum(cint(replace(part, ".", ","))) AS parti, sum(cint(replace(abbpa, ".", ","))) AS abbpar, sum(cint(replace(mtnvv, ".", ","))) AS mtnvver, sum(cint(replace(abnvv, ".", ","))) AS abnvver, sum(cint(replace(mtnin, ".", ","))) AS mtnint, sum(cint(replace(abnin, ".", ","))) AS abnint
FROM versement_ventilations
WHERE (((versement_ventilations.IND)='31099901.6-0002.8') AND ((CInt([fonds])) In (select distinct num_fond from fonds where designation = 'BTP PRUDENT')));

Cette requête sous Access fonctionne très bien.
J'aimerais la retranscrire sous VB, mais mon soucis se situe  au niveau des guillemets de la fonction Replace. En effet, cette requête est placée dans une variable String et les guillemets finissent la chaine de caractère. Bon...  je sèche.
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
21 mai 2007 à 10:54
Salut,
Désolé mais la solution du doublage de guillements aurait du résoudre tes besoin.

Mais que je t'ai dit, 'meme résultat avec et sans replace' ne se verifie pas chez toi?

@+: Ju£i?n
Pensez: Réponse acceptée
0
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 10:56
En mettant 2 guillemets à la suite la variable Requete prend bien la requête telle qu'elle devrait être prise mais l'erreur suivante se produit "fonction "replace" non définie dans l'expression". Peut-être me manque-t-il une référence ?
0
antoine_ferard Messages postés 222 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 18 février 2011 3
21 mai 2007 à 10:59
Sous Access, sans le "replace", l'erreur "type de donnée incompatible" est rendue, surment dû à la conversion en "integer" d'un "point" au format texte. Je dois obligatoirement remplacer les "points" en "virgules" pour que ça fonctionne.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
21 mai 2007 à 12:53
Si ton problème vient du séparateur décimal, tu devras effectivement changer la configuration des autres postes.

Pourquoi utiliser un champ texte pour des nombres ?
Pourquoi le CInt si tu veux modifier le séparateur décimal ?

MPi
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
21 mai 2007 à 23:46
Salut,¨
Pas cohérent tout ça !
Remplacer le point par la virgule pour avoir un Entier.
Si c' était pour convertir en Monnétaire, je comprenderait..
Mais bon, à chacun son choix.

<hr />
0
ObelixSuisse Messages postés 15 Date d'inscription lundi 9 mai 2005 Statut Membre Dernière intervention 26 mai 2010
26 mai 2010 à 10:50
Bonjour,
J'arrive peut-être après la tempête !!! Hem 3ans déjà ouch!
La function Replace qui fonctionne sous Access est émulée par Access et est une fonction VBA dans ce cas...
La function Replace n'existe pas sous ADODB ou OLEDB, il faut malheureusement la coder en utilisant la function IIF qui elle fonctionne...


SQL="SELECT iif(Instr([part],""."")>0,Left([part],Instr([part],""."")-1) & "","" & Mid([part],Instr([part],""."")+1),[part])" AS PARTI
FROM versement_ventilations

Expliquation:
iif(Instr([part],""."")>0,Left([part],Instr([part],""."")-1) & "","" & Mid([part],Instr([part],""."")+1),[part])"

On regarde si la chaîne comporte bien un ".", en prend tout ce qu'il y'a à gauche du "." ensuite on insère notre "," puis on recolle tout ce qu'il y'a à droite du ".".

(ne fonctionne qu'avec une seule occurence malheureusement, mais bon y'a qu'un point dans un chiffre à décimal)

Obelix
0
Rejoignez-nous