Problème avec delphi4 sur des base de donnée Dbase pour windows [Résolu]

Signaler
Messages postés
3
Date d'inscription
dimanche 29 janvier 2012
Statut
Membre
Dernière intervention
13 avril 2012
-
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
-
Bonjour


quelqu'n pourrait-t'il me dire sur la procedure suivante , comment cela ce fait que delphi me dit ( opération en virgule flottante incorrect ) quand je sort de mon champs et que j'appelle la procédure , et ceci egalement avec les champ suivant mais que quand les champs sont vide ,si il sont avec une valeur minimum de 1 pas de zero car avec zero cela ne fonctionne pas nom plus , la il le prend sans problème .

Mes champ sont de type Float et même si je les met en type numérique cela ne change rien.

Attention je suis encore toujours sous Delphi4 Pro
Merci d'avance pour vos réponse.


code


--------------------------------------------------------------------------------
procedure tform22.calcul_bloc;
var
t_hb, t_lob, t_lab, m_L, m_lo, totb, totmca :variant;
begin

if source.CustomerData.calculmetrecubeBLOC_H.IsNull then source.CustomerData.calculmetrecubeBLOC_H.Value:=0;
if source.CustomerData.calculmetrecubeBLOC_LA.IsNull then source.CustomerData.calculmetrecubeBLOC_LA.Value:=0;
if source.CustomerData.calculmetrecubeBLOC_LO.IsNull then source.CustomerData.calculmetrecubeBLOC_LO.Value:=0;
if source.CustomerData.calculmetrecubeM2_LONGEUR.IsNull then source.CustomerData.calculmetrecubeM2_LONGEUR.Value:=0;
if source.CustomerData.calculmetrecubeM2_LARGEUR.IsNull then source.CustomerData.calculmetrecubeM2_LARGEUR.Value:=0;





t_hb:=source.CustomerData.calculmetrecubeBLOC_H.Value; //taiile des blocs
t_lob:=source.CustomerData.calculmetrecubeBLOC_LO.Value;
t_lab:=source.CustomerData.calculmetrecubeBLOC_LA.Value;

m_L:= source.CustomerData.calculmetrecubeM2_LARGEUR.Value; // metre carré
m_lo:=source.CustomerData.calculmetrecubeM2_LONGEUR.Value;

source.CustomerData.calculmetrecubeMCU_BLOC.Value:=m_L*m_lo*t_lab;
source.CustomerData.calculmetrecubeMCA_BLOC.Value:=m_L*m_lo;
totb:=t_hb*t_lob;
totmca:=m_L*m_lo;
source.CustomerData.calculmetrecubeQU_BLOC.Value:=totmca/totb;


end;

4 réponses

Messages postés
3811
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
15 juin 2020
30
Salut,

essaye voir un truc du genre:
begin
  ...
  if (TotMca <> 0 ) and (TotB <> 0) then
    source.CustomerData.calculmetrecubeQU_BLOC.Value := totmca/totb
  else
    source.CustomerData.calculmetrecubeQU_BLOC.Value := 0;
end;


c'est la seule chose qui me vient à l'esprit avec les infos que tu donnes.

[hr]@+Cirec
[hr]
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
Bonjour,

delphi4 n'est pas en cause...

Quelle ligne de la procédure calcul_bloc
déclenche le message d'erreur ?
(mets des points d'arrêts)

cantador
Messages postés
3
Date d'inscription
dimanche 29 janvier 2012
Statut
Membre
Dernière intervention
13 avril 2012

ui effectivement comme ça sa fonction cirec , mais je doit effectivement dabord vérifier que la valeur soit differente de zero, car si mon champ posède zero ca ne fonctionne pas , j'aurais naturellement préféré le faire sans ce genre de chose mais bon je vais devoir ecrire baucoup plus de cote car j'ai 49 champs à faire correspondre. encore merci à toi et à cantadorv pour vos réponse.
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
12
car j'ai 49 champs à faire correspondre
Répéter autant de fois la procédure est beaucoup trop lourd.

il faut donc étudier la mise en place d'une procédure unique
en plaçant des paramètres, comme field par exemple.

ou en se servant d'un évènement comme :

OnBeforePost
ou
OnChange

cantador