Problème de fonction Replace (?) [Résolu]

antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:09 - Dernière réponse : ObelixSuisse 15 Messages postés lundi 9 mai 2005Date d'inscription 26 mai 2010 Dernière intervention
- 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 ?
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 11:05
3
Merci
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.

Merci antoine_ferard 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de antoine_ferard
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 21 mai 2007 à 10:13
0
Merci
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
Commenter la réponse de jrivet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 21 mai 2007 à 10:14
0
Merci
Salut,
Ah tiens les deux dernieres parenthèses ont été bouffées.

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:16
0
Merci
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.
Commenter la réponse de antoine_ferard
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:20
0
Merci
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 ?
Commenter la réponse de antoine_ferard
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:24
0
Merci
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.
Commenter la réponse de antoine_ferard
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 21 mai 2007 à 10:25
0
Merci
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
Commenter la réponse de jrivet
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 21 mai 2007 à 10:26
0
Merci
OUps post croisé désolé.

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:29
0
Merci
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.
Commenter la réponse de antoine_ferard
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 21 mai 2007 à 10:33
0
Merci
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
Commenter la réponse de jrivet
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:37
0
Merci
...parceque le caractère "point" n'est pas convertissable en "integer".
Commenter la réponse de antoine_ferard
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 21 mai 2007 à 10:41
0
Merci
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
Commenter la réponse de jrivet
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:52
0
Merci
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.
Commenter la réponse de antoine_ferard
jrivet 7401 Messages postés mercredi 23 avril 2003Date d'inscription 6 avril 2012 Dernière intervention - 21 mai 2007 à 10:54
0
Merci
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
Commenter la réponse de jrivet
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:56
0
Merci
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 ?
Commenter la réponse de antoine_ferard
antoine_ferard 222 Messages postés mercredi 5 avril 2006Date d'inscription 18 février 2011 Dernière intervention - 21 mai 2007 à 10:59
0
Merci
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.
Commenter la réponse de antoine_ferard
cs_MPi 3877 Messages postés mardi 19 mars 2002Date d'inscription 23 août 2018 Dernière intervention - 21 mai 2007 à 12:53
0
Merci
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
Commenter la réponse de cs_MPi
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 21 mai 2007 à 23:46
0
Merci
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 />
Commenter la réponse de chaibat05
ObelixSuisse 15 Messages postés lundi 9 mai 2005Date d'inscription 26 mai 2010 Dernière intervention - 26 mai 2010 à 10:50
0
Merci
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
Commenter la réponse de ObelixSuisse

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.