DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 130864 - Dernière mise à jour: lundi 1 décembre 2003 - Version: 2.1

 

Sommaire

Symptômes

Un formulaire contenant des données un-à-plusieurs qui sont basés sur une vue peut actualiser pas correctement lorsque les données dans un parent enregistrent les modifications. Il affiche les données correctes dans l'enregistrement où les données ont été modifiées, mais d'autres enregistrements enfants pour le diaporama parent l'ancienne version des données. Ce problème se produit même si une TABLEUPDATE() ou une commande ThisForm.Show est émise.

Cause

Ce comportement est voulu par la conception même du produit. Les données dans la vue sont le résultat d'une requête qui a été effectuée lorsque le formulaire a été initialement chargé. La requête crée un curseur dans la mémoire avec une copie des données issues des tables source. Lors du chargement de formulaire, une barre de thermomètre apparaît montrant la progression de cette requête.

Lorsqu'une commande TABLEUPDATE() est émise, les modifications sont envoyées pour les tables source. Les enregistrements enfants dans la vue ne sont pas mis à jour car il n'y a pas de lien dynamique entre la vue et la table source. Ces enregistrements ne s'affichent pas les nouvelles informations jusqu'à ce que la requête est exécutée à nouveau.

Résolution

Voici deux solutions possibles :

  • Baser le formulaire sur les tables source au lieu d'une vue. Cela est possible uniquement si l'affichage est entièrement constitué de tables locales.

    - ou -
  • Émettre une fonction REQUERY() après chaque TABLEUPDATE().
Choisir la solution la mieux adaptée à votre situation en modifiant les avantages liés à l'utilisation d'un affichage avec les performances d'accès provoquée par la fonction REQUERY().

Vous pouvez placer la fonction REQUERY() dans le diaporama ou actualiser des événements du formulaire. Dans ce cas, la requête à exécuter chaque fois qu'un Form.Show ou Form.Refresh est émise, afin que les données les plus récentes sont toujours affichées. Alternativement, vous pouvez placer la fonction REQUERY() dans tous les événements qui utilisent une commande TABLEUPDATE(), telle que l'événement InteractiveChange d'une grille ou l'événement Click d'un bouton de commande.

Plus d'informations

Lorsque vous utilisez Visual FoxPro pour Macintosh 3. 0 b à l'expression «clic droit» signifie en appuyant sur le bouton de contrôle sur le clavier tout en cliquant sur.

Procédure pour reproduire le problème

  1. La commande suivante pour ouvrir la base de données Tastrade :
       OPEN DATABASE c:\vfp\samples\mainsamp\data\tastrade
       MODIFY DATABASE
    							
  2. Cliquez avec le bouton droit sur l'arrière-plan gris dans le Concepteur de base de données. Choisissez nouvelle vue locale. Cliquez sur le bouton de nouvelle vue.
  3. Lorsque la boîte de dialogue «Ajouter Table ou View» s'ouvre, sélectionnez la table client, puis cliquez sur le bouton Ajouter pour ajouter la table à l'affichage. De même, ajoutez les tables Orders et Order_Line_Items à l'affichage. Fermez la boîte de dialogue.
  4. Dans l'onglet champs, ajoutez les champs suivants à l'affichage :
       Customer.Customer_id, Customer.company_name, Orders.customer_id,
       Orders.order_id, Orders.order_date, Order_line_items.order_id,
       Order_line_items.quantity.
    							
  5. Dans l'onglet critères de mise à jour, cliquez sur la zone Envoyer les mises à jour SQL. Assurez-vous que toutes les tables sont sélectionnées dans la zone de liste de tableau. Cliquez sur dans la colonne de clé pour sélectionner les champs clés pour chaque table. Assurez-vous qu'uniquement les colonne de clé (Customer.customer_id Orders.customer_id, champs et Order_Line_Items.order_id) sont sélectionnés comme champs de clé. Cliquez sur la colonne mise à jour, pour sélectionner tous les autres champs. Cliquez sur le SQL WHERE clause «clé champs uniquement» et la mise à jour à l'aide des boutons de la "Mise à jour SQL".
  6. Enregistrer la vue en tant que MyView.
  7. Créer un nouveau formulaire. Dans le menu Affichage, choisissez environnement de données. Utilisez un clic droit pour sélectionner Ajouter une table. Dans la boîte de dialogue «Ajouter Table ou View», activez cette case à cocher Afficher les vues et sélectionnez Ajouter l'affichage pour vous avez créé dans étape 6. Cliquez sur le bouton ADD pour ajouter la table à l'environnement de données du formulaire, puis fermez la boîte de dialogue.
  8. Dans l'environnement de données du formulaire, sélectionnez l'affichage que vous venez d'ajouter. Cliquez avec le bouton droit sur, puis sélectionnez Propriétés.
  9. Affectez à la propriété BufferModeOverride 3 - Buffering de ligne optimiste.
  10. Cliquez sur le titre de l'affichage dans l'environnement de données et faites-la glisser vers le formulaire. Une grille doit apparaître.
  11. Ajoutez un bouton de commande avec le code suivant dans l'événement click :
        =TABLEUPDATE()
    							
  12. Enregistrez et exécutez le formulaire. Modifier le nom de la société pour une des sociétés possédant plusieurs enregistrements. Cliquez sur le bouton de commande.
  13. Fermez le formulaire et ouvrez-le dans le Concepteur Forms. Ajoutez la ligne de code suivante après avoir créé les =TABLEUPDATE() sur le bouton de commande d'étape 11 :
        =REQUERY()
    							
  14. Exécutez à nouveau le formulaire et modifier le nom de la société à sa valeur d'origine. Les données mises à jour doivent afficher pour tous les enregistrements lorsque vous avez cliqué sur le bouton de commande.

Références

Pour plus d'informations, reportez-vous au chapitre 8 du Guide du développeur Microsoft Visual FoxPro.

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual FoxPro 3.0 Édition Standard
  • Microsoft Visual FoxPro 5.0 Édition standard
  • Microsoft Visual FoxPro 6.0 Édition Professionnelle
  • Microsoft Visual FoxPro 3.0b for Macintosh
Mots-clés : 
kbmt KB130864 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 130864  (http://support.microsoft.com/kb/130864/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store