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 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
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 13
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 13
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
Rejoignez-nous