antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 2011
-
21 mai 2007 à 10:09
ObelixSuisse
Messages postés15Date d'inscriptionlundi 9 mai 2005StatutMembreDernière intervention26 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".
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 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.
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 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 ?
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 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.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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?
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 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.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 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]
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 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.
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 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 ?
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 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.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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.
ObelixSuisse
Messages postés15Date d'inscriptionlundi 9 mai 2005StatutMembreDernière intervention26 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
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)