Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Connexion aux bases de données
Connexion aux bases de données Forum d'entraide sur la connectivité Firebird: composants, drivers, transactions, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/07/2006, 16h31   #1
Invité régulier
 
Inscription : juin 2002
Messages : 41
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Algérie

Informations forums :
Inscription : juin 2002
Messages : 41
Points : 5
Points : 5
Par défaut ApplyUpdates avec 02 tables en maître et détail

Bonjour tout le monde,

J'ai deux Tquery en maître /détail en utilisant la prporiété datasource de l'ensemble détail , j'utilise le mode de mises à jour en mémoire cache (cachedupdate =true) , après modification de mes 02 tables je fait un ApplyUpdates comme suit database.ApplyUpdates([qrydetail , qrymaitre ])

Lorsque j'ai echec de la mise à jour, le cache de qryDetail devient vide dès que je ré-edite l'ensemble qrymaitre ! je pense que le problème est du a un refresh sur le query détail, ce qui implique qu'il y a effacement du cache.

est-ce que qq un a une idée comment maitre a jour deux ensemble de données en maîtredétail sous IB sans avoir ce genre de désagréments.

Merci d'avance !

Amène
aallal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2006, 11h19   #2
Invité régulier
 
Inscription : juin 2002
Messages : 41
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Algérie

Informations forums :
Inscription : juin 2002
Messages : 41
Points : 5
Points : 5
je vais reformuler mon problème avec du code cette fois, j'espère que j'aurais de l'aide cette fois, sinon pour quoi variment utilser ce forum si à chaque fois il y a un silence total ? Et en plus ce problème est asser important !

Il s'agit de metre à jour 02 Tquery en mâitre détail en utilisant le mode de mise à jour dans le cache (cachedupdate = true)

Code :
1
2
3
4
SELECT PIECE_NUMBER, ITEM_NO, ITEM_ORDER, PART_NO , 
PART_DESC , QTY ,PUHT , PUTTC, REMISE , PUNETHT , PUNETTTC, 
TOTALHTNET ,TVA , TOTALTTCNET  FROM ITEM I WHERE PIECE_NUMBER = 
:IPIECE_NUMBER ORDER BY ITEM_NO
Le query maître appelé dsPiece (qui représente une facture ou un BL) et le query détail appelé dsItems (qui représente le détail facture), qui sont en maiter détail en utisant un paramètre (IPIECE_NUMBER e) dans le query détail comme suit :


le problème ce pose au moment de la mise à jour en cas d'insertion d'une nouvelle facture avec détail :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Db.dbSales.StartTransaction;
     try
     IF dsPiece.State IN [dsInsert, dsEdit] then dsPiece.Post;
      IF dsPiece.UpdatesPending then
         dsPiece.ApplyUpdates;
      IF dsItems.UpdatesPending then
        dsItems.ApplyUpdates;
 
      MD.dbSales.Commit;
      dsPiece.CommitUpdates;
      dsItems.CommitUpdates;
    // rafraichissement de la tbale des articles et des achats
   except
    ON E: Exception do
       begin
      dsPiece.Tag := 1 ; 
       Result := False;
       MD.dbSales.Rollback;
       dsPiece.edit;
       showmessage(E.Message) ;
       end;
   end;
En cas d'echèc de la mise à jour au niveau du détail (dsItems , cas à titre d'exemple d'une quantité saisie vide en Null), j'ai principalement 02 souscis :

Le maitre je le passe en mode edition (dsPiece.editpour réexpidier les mise à jour après correction faitre sur le détail, le problème c'est qu'il execute lors d'un nouveau enregistrement la requette ModifySql au lieu de InsertSql, ce problème j'ai pu le contourner comme suit dans le gestionnaire OnUpdaterecord du master :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TMDPiece.qryBLUpdateRecord(DataSet: TDataSet;
  UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
IF    UpdateKind= ukInsert then    usqlBL.Apply(UpdateKind)
else
IF    UpdateKind= ukModify then
        begin
        IF DataSet.Tag= 1 then
                // cas de echec insertion
                begin
                 usqlBL.Apply(ukInsert);
                 DataSet.Tag :=0 ;
                end
        else usqlBL.Apply(UpdateKind);
        end ;
 
UpdateAction :=  uaApplied ;
end;

Le deuxième problème que j'ai pas encore trouvé , le cache du détail n'est pas bien enregistré, une partie du cache est perdu au moment des essais d'enregistrements qui ont échoués , il s'agit des record qui ont été bien enregistré avec le dsItems.ApplyUpdates;

Merci pour voter aide !
aallal est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2006, 15h57   #3
Membre régulier
 
Avatar de maamar1979
 
Inscription : mai 2006
Messages : 174
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 174
Points : 96
Points : 96
salam

je te propose de contourner le probleme on ne permettant la saisie des lignes de tes bons seulement apres enregistrement effectif du bon (c'est à dir enregistrement du bon dans la table maitre puis enregistrement ligne par ligne dans la table details).

je travail de la sorte et ca me simplifi les chose. oki.

juste une sujestion
__________________
On fait tous les X choses nécessaires pour avoir comme résultats un Y, finalement c'est Z qu'on obtiens : c'est le destin.
maamar1979 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2006, 18h04   #4
Invité régulier
 
Inscription : juin 2002
Messages : 41
Détails du profil
Informations personnelles :
Âge : 39
Localisation : Algérie

Informations forums :
Inscription : juin 2002
Messages : 41
Points : 5
Points : 5
Je te remercie pour la réponse , mais moi j'ai pas de problème avec le query maître, mais plutôt avec le query détail, j'ai une perte d'enregfiostrement dans le cache de query détail ! je sais pas c'est dû à quoi ?

Amène.
aallal est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h29.


 
 
 
 
Partenaires

Hébergement Web