OnCalcFields probleme de synchronisation

abcdef70 Messages postés 10 Date d'inscription samedi 12 août 2006 Statut Membre Dernière intervention 4 avril 2009 - 28 mars 2009 à 01:01
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 5 avril 2009 à 18:55
J'ai un probleme de synchronisation de mes tables, certain calcul dépende d'autre tables, mais celles-ci ne sont pas positionné sur la bonne fiche avant que le calcul soit effectué..

J'ai les tables suivantes (avec relation maitre-détail) :

TablePersonneMaitre
TabletBanque   (MasterSource = TablePersonneMaitre)
TableAchat   (MasterSource = TablePersonneMaitre)

Dans ma Form, TableAchat effectu le calcul suivant dans son évènement OnCalcFields:

TableAchat_ResteAPayer := TableAchat_TotalDesAchats  - TabletBanque_ArgentEnBanque;

Le problème est que lorsque je passe d'une personne à une autre en naviguant la TablePersonneMaitre, le calcul est effectué dans TableAchat avant que TableBanque pointe sur la bonne personne. Ainsi, le calcul est toujours selon le montant en banque de la personne précédamment visionné. Y a t'il un moyen de spécifié l'ordre dans lequel les tables doivent être resynchronisé, pour que TableBanque soit positionné sur la bonne personne avant que TableAchat fasse le calcul?

Merci pour toutes informations..

Mikymike

7 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
28 mars 2009 à 19:58
bonsoir


mets ton calcul sur la table maître en faisant référence aux champs liés des tables achat et banque.

cantador
0
abcdef70 Messages postés 10 Date d'inscription samedi 12 août 2006 Statut Membre Dernière intervention 4 avril 2009
29 mars 2009 à 08:30
Je ne peux pas utiliser cette méthode, car la table Achat n'est pas dans le Datamodule avec la table maitre et la table banque, elle est dans une form pour les achat, créé quand j'en ai besoin.

Mikymike
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
29 mars 2009 à 13:08
car la table Achat n'est pas dans le Datamodule


ce n'est pas un problème, il faut aller chercher le query par :
NomForm.Query.fieldByName('NomChamp').Value

la table banque, elle est dans une form pour les achat, créé quand j'en ai besoin.
Au moment où le calcfields se déclenche, il faut bien entendu que les champs des query soient dans des formes actives..
il faut peut être revoir la conception, mais ça ne me semble pas bien méchant..

Certaines formes peuvent être créés automatiquement au démarrage de l'appli..

cantador
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
30 mars 2009 à 09:31
mais c'est dingue ... personne ne sait dire "bonjour" pour commencer un post ? vous êtes bien gentils de répondre ...
0

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

Posez votre question
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 mars 2009 à 20:34
Oui Julio, tu as raison..

cantador
0
abcdef70 Messages postés 10 Date d'inscription samedi 12 août 2006 Statut Membre Dernière intervention 4 avril 2009
4 avril 2009 à 21:13
J'ai trouvé une solution en désactivant et réactivant la TableBanque, à la création de la Form contenant la TableAchat, Il semble que le Datasource mets à jours les items en sens inverse d'inscription. du dernier connecté au Datasource, jusqu'au premier connecté.

En faisant ce qui suitdans la form achat, qui contient la TableAchat,cela fonctionne:

TableBanque.Close;
TableBanque.MasterSource := nil;

TableBanque.MasterSource := TableMaitre;

TableBanque.Open;

merci pour vos suggestions :)
Mikymike
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
5 avril 2009 à 18:55
Mettre un datasource à nil est toujours une mauvaise idée car cette manipulation n'est pas du tout optimisée.
ça veut dire qu'une autre solution est possible..

cantador
0
Rejoignez-nous