Problème avec delphi4 sur des base de donnée Dbase pour windows

Résolu
etienneborms
Messages postés
3
Date d'inscription
dimanche 29 janvier 2012
Statut
Membre
Dernière intervention
13 avril 2012
- 14 mars 2012 à 05:17
cs_cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
- 16 mars 2012 à 09:34
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

Cirec
Messages postés
3832
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
17 février 2022
48
14 mars 2012 à 12:56
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]
3
cs_cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
14 mars 2012 à 10:35
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
0
etienneborms
Messages postés
3
Date d'inscription
dimanche 29 janvier 2012
Statut
Membre
Dernière intervention
13 avril 2012

14 mars 2012 à 13:54
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.
0
cs_cantador
Messages postés
4720
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
31 juillet 2021
14
16 mars 2012 à 09:34
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
0