Requête sql

Résolu
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 - 18 janv. 2006 à 11:21
cs_rt15 Messages postés 3874 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

8 réponses

moldov Messages postés 165 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 10 novembre 2008
18 janv. 2006 à 11:32
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
0
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 1
18 janv. 2006 à 13:35
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
18 janv. 2006 à 18:12
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!)
0
pseudoOM Messages postés 173 Date d'inscription jeudi 3 février 2005 Statut Membre Dernière intervention 30 janvier 2009 1
18 janv. 2006 à 20:38
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
19 janv. 2006 à 10:30
????

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.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
19 janv. 2006 à 22:56
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.
0
jlen100 Messages postés 1606 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 25 juillet 2014 13
19 janv. 2006 à 23:46
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
20 janv. 2006 à 12:38
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 !
0
Rejoignez-nous