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

Bases de données Delphi Discussion :

[TTable] Pb avec une relation maitre-detail


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut [TTable] Pb avec une relation maitre-detail
    Bonjour, j'ai developpe avec delphi6 des relations maitre-detail qui fonctionnaient tres bien !
    J'ai porte mon appli vers Delphi7. Et depuis, j'ai des soucis avec mes relations maitres detail.

    Je schematises :
    J'ai trois TTables : Maitre, Detail1 et Detail 2
    Detail 1 et Detail2 sont lies a Maitre par un champ IDMaitre de type integer.
    J'ai code l'evenement Maitre.Onscroll pour mettre a jour les tables Detail1 et Detail2 en faisant Refresh.

    Tout cela fonctionne correctement quand j'ouvre mes tables. Mais des que je fais un scroll sur Maitre, si il se trouve que Detail1 ou Detail2 est vide car aucun enregistrement n'existe avec la contrainte Detail#_IDMaitre = Maitre_IdMaitre alors la boum, j'ai droit au message d'erreur :
    Le projet xxxxxx a provoque une classe d'exception EVariantArrayLockedError avec le message 'Le variant ou le tableau est verouille'. Processu stoppe. ...
    Je precise que je n'ai pas de champ Tableau dans mes tables !
    En travaillant pas a pas, j'ai constate que c'est sur Detail#.Refresh que ca plante.

    (Je travaille avec Delphi7, l'nvirronement CLX, DBExpress et Firebird 1.5)

    Est ce que quelqu'un a connaissance de ce probleme ?
    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut
    Alors, j'ai reetudie la question. Il s'avere que c'est bien le fait de faire Refresh alors que le resultat est vide qui fait planter les DataSet Detail.
    Pour resoudre le probleme, j'ai du implementer les evenements du DataSet Maitre comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Procedure Maitre.AfterRefresh(...);
    Begin
      Detail1.Refresh;
      Detail2.Refresh;
    End;
     
    Procedure Maitre.AfterScroll(...);
    Begin
      Detail1.Close; Detail1.Open;
      Detail2.Close; Detail2.Open;
    End;
    Ce qui, n'est pas extremement genant, HORMIS un petit laps de temps d'ouverture/fermeture des DataSet !
    Est ce que quelqu'un a une meilleure solution ?

    Ca m'amene aussi a poser une question subsidiaire :
    Suite a mon probleme, j'ai cherche minutieusement dans l'aide et les tutos, et je crois avoir compris que les relations maitre-details se mettent a jour toute seule ! C'est a dire, que le fait de scroller dans la table maitre raffraichi les tables details sans avoir besoin de l'implementer dans Maitre.AfterScroll et Maitre.AfterRefresh. Mais chez moi, je ne constates pas ce comportement : si je ne l'implemente pas, mes tables details reste dans leur etat initiale !!!
    Alors est ce seulement chez moi, ou est ce normale ? Est ce du au fait que je travail avec la CLX et non VCL ? (Je n'ai jamais developpe avec VCL)
    Merci pour vos reponses.

  3. #3
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 568
    Par défaut
    Salut

    Il me paraît bizarre que tu utilises des composants TTable dans une application DBExpress.
    Les TTable ne sont pas recommandés avec des bases SQL telles que FireBird.

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Par défaut
    Exact ! Excuse moi, c'est pâs des TTable mais des TSQLTable.

Discussions similaires

  1. insert dans une relation maitre/detail
    Par Issam dans le forum Silverlight
    Réponses: 0
    Dernier message: 24/09/2010, 17h47
  2. établir une relation Maitre/Détail avec SQL
    Par SmileSoft dans le forum C++Builder
    Réponses: 8
    Dernier message: 26/09/2009, 20h19
  3. Réponses: 5
    Dernier message: 12/12/2005, 18h42
  4. [Ferme] DBLookup fiche detail (relation maitre detail)
    Par boyerf dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/02/2004, 20h12

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