Requête SQL dans code VB6 : fonction "replace" [Résolu]

Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Dernière intervention
18 février 2011
- - Dernière réponse : antoine_ferard
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Dernière intervention
18 février 2011
- 19 sept. 2007 à 11:00
Je développe une appli en VB6 avec une base Acces.

J'ai besoin de récupérer via une requête SQL, la somme des achats sur 1 an.

La table ACHATS a une valeur [DACHAT] pour la date de l'achat et [MACHAT] pour le montant de l'achat.

Dans VB6, je créé une variable "Rqte" qui prend pour valeur la requête à exécuter. J'exécute cette requête de la manière suivante : 
       Set Rst1 = New ADODB.Recordset
       Rst1.Open Rqte, BaseConnect, adOpenStatic, adLockReadOnly

Mon problème est que la valeur  [DACHAT] est au format texte (impossible de le changer), et donc je dois la convertir dans la requête pour pouvoir tester que cette date est située dans la dernière année. Je fais comme suit :
      "select sum(machat) from achats where cdate(replace(dachat, ".", "/")) >= (date - 365)"

Il resort une erreur au niveau du "replace".
Désolé si c'est pas très clair mais si qqun à une solution ça serait cool. Merci
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
29
3
Merci
salut,
tu confonds la VB et l'SQL....

les fonctions VB sont executées avant la requête.
avant (énoncé) tu la mettais en dur dans la chaîne donc elle ne risquait pas d'être interprétée

ensuite (correction) tu sépares le code (ok) mais avec un nom de champs qui n'existe pas ENCORE puisque la requête n'est pas executée, donc forcément le champs est pris comme une variable qui n'existe pas non plus

tu ne pourras pas faire de test de chaîne proprement à cause des points

le seul moyen ici est de ne pas faire de WHERE, et de filtrer ensuite tes résultats, puisque là tu pourras tester la date et modifier comme tu veux

++

<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 87 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
6
0
Merci
Salut,

Dans les requetes SQL les dates doivent être encadrées de #
Et regarde peut-être du côté de la fonction format..
Commenter la réponse de lolokun
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Dernière intervention
18 février 2011
3
0
Merci
j'ai mis celà, désormais le problème est que la variable dachat n'existe pas. pouvez-vous m'aider.

...WHERE cdate('" & Replace(dachat, ".", "/") & "')>=cdate('18/09/2004')
Commenter la réponse de antoine_ferard
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
1
0
Merci
Salut,

je pense que tu dois, soit changer le type de données (text vers numeric) soit utiliser un recordset pour recupérer les donnée que tu souhaites manuellement pour effectuer ensuite ton traitement.
Commenter la réponse de cs_Nicko11
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Dernière intervention
27 août 2013
6
0
Merci
Dachat est un champ de ta table tu peux y accéder avec Rst1.fields("DACHAT')
Commenter la réponse de lolokun
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Dernière intervention
19 septembre 2007
1
0
Merci
tu as une raison particuliere qui te pousse a choisir le format text pour ce champ.
Commenter la réponse de cs_Nicko11
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Dernière intervention
18 février 2011
3
0
Merci
oui, je suis obligé de garder un format text pour le champ dachat, je vais finalement retenir la solution de PCPT... merci quand-même... peace
Commenter la réponse de antoine_ferard

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.