Requête sql [Résolu]

Messages postés
174
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009
- - Dernière réponse : cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
- 20 janv. 2006 à 12:38
Salut à tous !
Mon problème est le suivant : J'ai créé un module dans lequel je stock mes dataset. J'aimerais savoir si la requête suivante (qui se trouve dans un de mes dataset) est valide parce quand j'exécute le programme et que je clic sur un bouton (donc la requête doit s'exécuter) il me met un message d'erreur (que je n'ai pas retenu dsl) me disant en gros que la reqête n'est pas bonne.

SELECT TRUNC(SUM(prix*0.21),2)
FROM Commandes
WHERE num_facture=:nf

Logiquement elle doit me renvoyer la somme totale de la tva de la commande d'un client arrondie à la valeur du dessous avec 2 chiffres après la virgule (ex : 12,2365 --> 12,23).

Merci de votre aide

pseudoOM
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
174
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009
3
Merci
Merci rt15, mais j'ai fini par faire comme je l'avait dit à mon dernier message. La solution pour l'extraction d'un caractère d'une chaine se trouve à cet endroit :
http://delphifr.com/forum.v2.aspx?id=643672
Encore merci d'avoir cherché !

pseudoOM

Dire « Merci » 3

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

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

Commenter la réponse de pseudoOM
Messages postés
168
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
10 novembre 2008
0
Merci
Salut,

Si c'est une base de données access tu peux tester ta requete en l'ecrivant manuellement comme ca tu verra mieu d'ou ca vient.

TRUNC est utiliser pour les date , aussi pour les nombres ?

Bonnne Prog
Commenter la réponse de moldov
Messages postés
174
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009
0
Merci
Sur internet j'ai vu que c'était possible mais j'ai essayé TRUNC dans Access et ça ne fonctionne pas avec des nombres.

Quelqu'un connaitrait-il un équivalent ?

Ou alors peut être avec un format( ) mais qui permettrait de n'avoir que 2 chiffres après la virgule mais qui n'arrondi pas ! Donc si le résultat est 25,2589 il faut que cela fasse 25,25 et pas 25,26 !
Si c'est possible les propositions sont les bienvenues.
Merci à tous !

pseudoOM
Commenter la réponse de pseudoOM
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
8
0
Merci
Bin c'est une idée comme ça, mais pourquoi pas simplement tronquer le résultat renvoyé avec un fonction de Delphi ? (Elle s'appelle peut être trunc d'ailleurs!)
Commenter la réponse de cs_rt15
Messages postés
174
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009
0
Merci
Non j'y avait pensé et j'ai été voir dans l'aide mais c'est pas ça !
Maintenant j'ai une autre idée mais je ne connais pas la fonction pour extraire un caractère d'une chaine ex : en admettant que 12,3467 est une chaîne, quelle est la fonction qui va me permettre d'extraire de la chaine le 3ème chiffre après la virgule (donc récupérer le 6). Comme ça je vérifie si il est >= à 5 et dans ce cas je diminue de 0,01 mon résultat final. Donc comme ça va arrondir avec Format(%.2f, 12.3467) à 12,35 en diminuant de 0,01 j'arriverai à 12,34.
Merci à celui qui m'aidera !

pseudoOM
Commenter la réponse de pseudoOM
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
8
0
Merci
????

Delphi n'as pas de fonction de troncature avec spécification de nombre de chiffre après la virgule ???

Je vais chercher un peu...

Sinon, pour ton truc, quelque chose de ce genre là :

function Soustraire(ATronquer: String): Boolean;
var
intI: Integer;
begin
Result:= false;
for intI:= 0 to Length(ATronquer) - 1 do
if (PChar(ATronquer)[intI] = ',') then
if (StrToInt(PChar(ATronquer)[intI + 3]) >= 5) then
Result:= True;
end;

J'ai écrit ça au feeling, alors y à peut être des erreurs. Mais le principe est là: On convertie la chaîne en pointeur sur caractère pour accéder à un caractère précis de la chaîne.

N'oublie pas de vérifier que la chaîne est suffisement longue pour encaisser le intI + 3 entre les deux si.
Commenter la réponse de cs_rt15
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
22
0
Merci
T'as essayé de déréférencer ton pointeur après l'avoir transtypé en pointeur non typé ?
Tu devrais...

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Commenter la réponse de cs_Delphiprog
Messages postés
1651
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
4
0
Merci
rt15--> une chaine étant un tableau il suffit d'indiquer l'indice
que l'on veut lire ainsi si tu veux récupérer le Nième caractère il
suffit d'écrire:

caractereN:=chaine[N];

un minimum de connaissance de la structure mémoire t'aurais permis
d'arrivér au résultat ( d'ailleurs cette organisation est identique à
tout les langages delphi, C.... ce qui est logique puisque c'est la
seule qui permette d'accéder facilement à la donnée suivante en
incrémentant simplement le pointeur.)



mais pouquoi faire simple quand on peut faire compliqué



@+

jlen
Commenter la réponse de jlen100
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
8
0
Merci
jlen,

Tout à fait, j'ai vu le code que tu as répondu sur l'autre poste de pseudoOM: Il est nettement plus propre que le mien !
Commenter la réponse de cs_rt15