Exception sur une lecture de stringgrid

cs_Kruger Messages postés 68 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 4 octobre 2004 - 13 févr. 2004 à 03:42
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 1 mars 2006 à 01:35
bonjour,
je suis en train de developper une petite appli qui permet la gestion de caisse et de stock d'un magasin et je me retrouve avec une exception quend j'additionne le contenu de cellules d'une stringgrid, cette exception est:

Le projet xxx.exe a provoquer une classe d'exception EConvertError avec le message '' n'est pas une valeur en virgule flottante correcte. processus stoppé.

en fait por additionner le contenu des cellules, j'ai fais une boucle qui me recupere toutes les valeurs et le soucis est qu'il y a des cellules vides et ce sont ces cellules qui me crée une exceptions puisqu'il ne reconnais pas le contenu d'une cellule vide en tant que réel, comment résoudre mon probleme, si qqn peut m'aider??

le contenu des cellules est du type 10.23
Merci de votre aide.

--==[Kruger]==--

9 réponses

MM TOUR Messages postés 6 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 25 février 2004
14 févr. 2004 à 11:02
Bonjour,
Pourquoi ne pas lire le contenu des cellules de la stringgrid dans un TRY ... EXEPT et traiter la dite exeption à ta convenance ? (par exemple sauter l'obstacle...)
En lisant ta question je m'en pose une aussi : pourquoi ne préfères - tu pas utiliser les 'CURRENCY' dans ton appli ?
amicalement, MM TOUR.
0
cs_Kruger Messages postés 68 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 4 octobre 2004
14 févr. 2004 à 14:20
excuse moi, j'aurai du le preciser au départ, en fait c'est que je suis débutant en delphi donc je suis pas forcement une lumière, :) .
Pour ce qui est des try exept et currency, comment les utiliser, pour le moment j'utilise une boucle pour faire le calcul:

Somme :=0;
for i:=1 to 19 do
Somme:= Somme+StrToFloat(StringGrid1.Cells[5,i]);
Remise:= StrToFloat(Edit5.Text);
Edit6.text:= FloatToStr(Somme-Remise);

Si toutes les cellules sont remplie, tous va bien, sinon, je me retrouve avec l'exception que j'ai cité au dessus

Merci de votre aide!

--==[Kruger]==--
0
cs_Kruger Messages postés 68 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 4 octobre 2004
14 févr. 2004 à 14:23
Pardon, ce que je voulais dire pour le CURRENCY, c'est quelle est la difference avec un float ou un double, dans mon cas ça revient au même, non??

--==[Kruger]==--
0
MM TOUR Messages postés 6 Date d'inscription lundi 2 février 2004 Statut Membre Dernière intervention 25 février 2004
14 févr. 2004 à 15:29
BIEN, avec ton extrait de code c'est un peu plus facile pour moi...
somme := 0; ensuite essaie
FOR i := 1 TO stringgrid.rowcount - 1 DO

(est tu sur que ta table aura toujours la même longeur? )

TRY
somme := somme + strtocurr(Stringgrid1.cells[5,j];
EXCEPT

et ici gère ton exception à ta convenance (entre begin et
end ..)

remise := strtocurr(Edit5.text);
edit6.text := currtostrf(somme - remise, fffixed, 2);

Autre solution : teste la valeur de ta cellule avant de l'addition..
IF stringgrid.cell[i,j] <> '' then
begin
ici, le code qui est entre try ... except.. et rien à gerer

end;
Note : CURRTOSTRF te permet de formater les valeurs monétaires en ajoutant les zeros absents. (10 devient : 10,00 )

voila qq. pistes..j'allais oublier : en mode execution Delphi ne semble pas voir les TRY.. donc essaie ton programe en
dehors.

Bonne chance!
MM TOUR
0

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

Posez votre question
cs_Kruger Messages postés 68 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 4 octobre 2004
14 févr. 2004 à 16:10
Merci beaucoup de ton aide, entre temps, j'avais essayer ça:
{Calcul du montant à payer}
Somme :=0;
for i:=1 to 19 do
begin
try
Somme:= Somme+StrToFloat(StringGrid1.Cells[5,i]);
except
on EconvertError do
Somme:= Somme+0;
end;
Remise:= StrToFloat(Edit5.Text);
Edit6.text:= FloatToStr(Somme-Remise);
end;
end;

sans sésultat non plus mais c'est parcequ'en mode execution, les exceptions ne sont pas gérée comme tu dis, j'avais pas pensé a essayer mon prog en dehors, merci beaucoup de ton aide MM_TOUR, j'en apprend tous les jours :) .

--==[Kruger]==--
0
cs_Kruger Messages postés 68 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 4 octobre 2004
14 févr. 2004 à 16:22
Voilà mon bout de code pour ceux qui aurais ou auront le même probleme que moi :)

{Calcul du montant à payer}
somme := 0;
for i := 1 to stringgrid1.rowcount - 1 do
try
somme := somme + strtocurr(Stringgrid1.cells[5,i]);
except
begin
somme := somme + 0;
end;
end;
remise := strtocurr(Edit5.text);
edit6.text := currtostrf(somme - remise, fffixed, 2);
end;
end.

Merci à MM_TOUR

--==[Kruger]==--
0
yasoft1 Messages postés 13 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 14 novembre 2009
1 mars 2006 à 01:16
merci beaucoup j'avais ce probleme
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 mars 2006 à 01:33
Salut,
il y avais aussi tout simplement function
StrToCurrDef(const S: string; const Default: Currency): Currency;
Si S une valeur en virgule flottante correcte il renvoie Default

Donc StrToCurrDef (' ', 0) revoie 0
Tout simplement
@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 mars 2006 à 01:35
Correction
il y avais aussi tout simplement la function
StrToCurrDef(const S: string; const Default: Currency): Currency;
Si S n'est pas une valeur en virgule flottante correcte il renvoie Default

Donc StrToCurrDef (' ', 0) revoie 0
Tout simplement
@+
Cirec
0
Rejoignez-nous