Requête SQL dans code VB6 : fonction "replace"

Résolu
Signaler
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
-
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
-
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

7 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
49
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
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
Salut,

Dans les requetes SQL les dates doivent être encadrées de #
Et regarde peut-être du côté de la fonction format..
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
3
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')
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
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.
Messages postés
1241
Date d'inscription
mardi 10 octobre 2006
Statut
Membre
Dernière intervention
27 août 2013
6
Dachat est un champ de ta table tu peux y accéder avec Rst1.fields("DACHAT')
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
tu as une raison particuliere qui te pousse a choisir le format text pour ce champ.
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
3
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