IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Connexion aux bases de données Firebird Discussion :

ApplyUpdates avec 02 tables en maître et détail


Sujet :

Connexion aux bases de données Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    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

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  3. #3
    Membre confirmé Avatar de maamar1979
    Inscrit en
    Mai 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 174
    Par défaut
    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : Algérie

    Informations forums :
    Inscription : Juin 2002
    Messages : 45
    Par défaut
    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.

Discussions similaires

  1. [WD14] Fiche avec deux tables détails
    Par free_dom dans le forum WinDev
    Réponses: 1
    Dernier message: 15/07/2014, 12h14
  2. Réponses: 7
    Dernier message: 04/09/2010, 12h51
  3. Maître/Détail avec plusieurs tables
    Par delphinauxdz dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/09/2007, 10h41
  4. Probleme avec une table vide
    Par king dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/03/2004, 14h24
  5. Problème avec mes tables de relation...
    Par mmike dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/06/2003, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo