Jump to content
  • 0
CédricDenies

Update d un enregistrement complet depuis un autre enregistrement

Question

Bonjour,

je suis dans le cadre d un import de mes enregistrements depuis un autre fichier

 

j ai copie les données sources vers une table tmp_A

je voudrais update les enregistrements de  la table À seulement quand les enregistrements ont le même index et que la date de modification de la table tmp_A est plus récent que celui de la Table A 

 

existe t il une autre solution que récupérer chaque valeur de champ de Tmp_A dans une variable séparée et le copie dans l’enregistrement de la table À 

Cela ça va quand j’ai 10 champs mais quand j’en ai 50 j’ai intérêt à pas oublier un champ ;) ( * le nombre de table) 

 

donc si si qqn connaît une astuce , ça m aiderait 

Merci

Share this post


Link to post
Share on other sites

19 answers to this question

Recommended Posts

  • 1
il y a une heure, gpto a dit :

une globale se remet a 0

Un détail : elle se remet à (vide) plutôt qu'à 0…

Share this post


Link to post
Share on other sites
  • 0

Un lien entre les deux tables id_tmp_A = id_Table A et date de modification top_A > date TableA

Un calcul qui indique 1 si vrai

Après tu sélection calcul = 1 et tu importes.

Share this post


Link to post
Share on other sites
  • 0

Merci Philippe 

les tests sont ok... c’est jusque que je dois créer une variable par champ d enregistrement pour passer cela dans l autre.

Quand ce sont des enregistrements avec une dizaine de champs ça va mais quand j’en ai 40-50 c’est rébarbatif ;) et j’ai toujours peur d’en oublier un ;)

 

donc je je me demandais si il n existait pas une astuce pour faire:

copier tous les champs de enrgEnCours.TableTmpA vers enrgEnCours.TableA

afin d’avoir une partie de code style :

 

Aller sur TableTmpA

definir variable $champ1,TableTmpA.champ1

definir variable $champ2,TableTmpA.champ2

...

definir variable $champXXX,TableTmpA.champXXX

aller sur tableA

definir rubrique TableA.champ1,$champ1

...

definir rubrique TableA.champXXX,$champXXX

 

merci ;) 

Share this post


Link to post
Share on other sites
  • 0

Salut

Si il y a une astuce je ne la connais pas, mais je suis preneur 🙂

moi aussi je passe par des script serveur du genre SI A2 ≠ A1 remplace A2 par A1..... et sur des dizaines de rubriques aussi 😉

bon courage et méthodologie (surtout)

Share this post


Link to post
Share on other sites
  • 0

@gpto : merci, ça me rassure (un peu) que je ne suis pas le seul à chercher cela... 

 

C’est étonnant qu’il n y ai rien en natif pour copier tout un enregistrement d’une table à l autre . 

Share this post


Link to post
Share on other sites
  • 0

Bonjour,

Copier un enregistrement d'une table à l'autre = import.

Il est possible de faire l'import en ajoutant un nouvel enregistrement ou en mettant à jour un enregistrement existant


Bien à vous,

Tanguy

 

Share this post


Link to post
Share on other sites
  • 0
Il y a 3 heures, tcolles a dit :

Bonjour,

Copier un enregistrement d'une table à l'autre = import.

Il est possible de faire l'import en ajoutant un nouvel enregistrement ou en mettant à jour un enregistrement existant


Bien à vous,

Tanguy

 

Merci @tcolles , mais quelle est la commande pour le faire par script? je ne trouve que "Importer des enregistrements" et cela ne me permet d'importer que tous les enregistrements d'une table d'un fichier externe vers une table du fichier en cours et non pas de définir des conditions (ou alors j'ai zappé des options, ce qui est aussi possible)

 

dans mon script, pour chaque table importée, je vérifie si l'enregistrement en cours n'existe pas encore (via l'id créé par calcul d'heure et uuid)

si il existe, je vérifie quel est la version la plus récente et je garde celle ci -> update si besoin

si il n'existe pas, je crée un nouvel enregistrement et update avec les données importée

donc la solution actuelle est de copier la valeur de chaque rubrique "importée" dans une variable puis de copier ces variables dans les rubriques identiques de la table destination.

cela fonctionne mais est fastidieux au codage, je me demande donc sil n'existe pas une fonction toute faite (native) qui le permet :)

 

Merci

Share this post


Link to post
Share on other sites
  • 0

Il suffit de faire une sélection (sélection = recherche) comme je te l'ai indiqué et tu n'aura que les fiches voulues.

Share this post


Link to post
Share on other sites
  • 0
Le 07/08/2019 à 19:02, Philippe ROTTIER a dit :

Un lien entre les deux tables id_tmp_A = id_Table A et date de modification top_A > date TableA

Un calcul qui indique 1 si vrai

Après tu sélection calcul = 1 et tu importes.

Merci @Philippe ROTTIER, je pense qu'on se comprend pas bien (dans un sens ou dans l'autre)

Trouver les enregistrement à copier de la table Temp vers la principale ( index identique et modification plus récente ainsi que ceux qui existent dans la table temp mais pas dans  la principale) ne pose pas de soucis, c'est voir si il y a moyen; de façon native ou via un script déjà existant; en qqs lignes de code de copier les valeurs de chaque rubrique d'un enregistrement sélectionné de la table Temp vers l'enregistrement sélectionné de la table Main.

ma solution actuelle est fonctionnelle mais un peu longue ( ici sur une base avec peu de rubriques mais j'ai des tables avec plus de 50 rubriques) 

 

 

 

la solution actuelle est

 

Activer modèle [ “TMP_ACH” (zi___ENF_ACH_AchatsGroupes) ; Animation: Aucune ]

#

Définir variable [ $TMP_01 ; Valeur: zi___ENF_ACH_AchatsGroupes::${01AchatGroupeSeptembre} ]

Définir variable [ $TMP_02 ; Valeur: zi___ENF_ACH_AchatsGroupes::${02AchatGroupeOctobre} ]

Définir variable [ $TMP_03 ; Valeur: zi___ENF_ACH_AchatsGroupes::${03AchatGroupeNovembre} ]

Définir variable [ $TMP_04 ; Valeur: zi___ENF_ACH_AchatsGroupes::${04AchatGroupeDecembre} ]

Définir variable [ $TMP_05 ; Valeur: zi___ENF_ACH_AchatsGroupes::${05AchatGroupeJanvier} ]

Définir variable [ $TMP_06 ; Valeur: zi___ENF_ACH_AchatsGroupes::${06AchatGroupeFevrier} ]

Définir variable [ $TMP_07 ; Valeur: zi___ENF_ACH_AchatsGroupes::${07AchatGroupeMars} ]

Définir variable [ $TMP_08 ; Valeur: zi___ENF_ACH_AchatsGroupes::${08AchatGroupeAvril} ]

Définir variable [ $TMP_09 ; Valeur: zi___ENF_ACH_AchatsGroupes::${09AchatGroupeMai} ]

Définir variable [ $TMP_10 ; Valeur: zi___ENF_ACH_AchatsGroupes::${10AchatGroupeJuin} ]

Définir variable [ $TMP_bool ; Valeur: zi___ENF_ACH_AchatsGroupes::boolVisible ]

Définir variable [ $TMP_zkp ; Valeur: zi___ENF_ACH_AchatsGroupes::zkp ]

Définir variable [ $TMP_zlg_creation ; Valeur: zi___ENF_ACH_AchatsGroupes::zlg_creation ]

Définir variable [ $TMP_zlg_creationNom ; Valeur: zi___ENF_ACH_AchatsGroupes::zlg_creationNom ]

Définir variable [ $TMP_zlg_modif ; Valeur: zi___ENF_ACH_AchatsGroupes::zlg_modif ]

Définir variable [ $TMP_zlg_modifNom ; Valeur: zi___ENF_ACH_AchatsGroupes::zlg_modifNom ]

#

Activer modèle [ “ACH_Vide” (ACH___gestion) ; Animation: Aucune ]

#

Définir rubrique [ ACH___gestion::01AchatGroupeSeptembre ; $TMP_01 ]

Définir rubrique [ ACH___gestion::02AchatGroupeOctobre ; $TMP_02 ]

Définir rubrique [ ACH___gestion::03AchatGroupeNovembre ; $TMP_03 ]

Définir rubrique [ ACH___gestion::04AchatGroupeDecembre ; $TMP_04 ]

Définir rubrique [ ACH___gestion::05AchatGroupeJanvier ; $TMP_05 ]

Définir rubrique [ ACH___gestion::06AchatGroupeFevrier ; $TMP_06 ]

Définir rubrique [ ACH___gestion::07AchatGroupeMars ; $TMP_07 ]

Définir rubrique [ ACH___gestion::08AchatGroupeAvril ; $TMP_08 ]

Définir rubrique [ ACH___gestion::09AchatGroupeMai ; $TMP_09 ]

Définir rubrique [ ACH___gestion::10AchatGroupeJuin ; $TMP_10 ]

Définir rubrique [ ACH___gestion::boolVisible ; $TMP_bool ]

Définir rubrique [ ACH___gestion::zkp ; $TMP_zkp ]

Définir rubrique [ ACH___gestion::zlg_creation ; $TMP_zlg_creation ]

Définir rubrique [ ACH___gestion::zlg_creationNom ; $TMP_zlg_creationNom ]

Définir rubrique [ ACH___gestion::zlg_modif ; $TMP_zlg_modif ]

Définir rubrique [ ACH___gestion::zlg_modifNom ; $TMP_zlg_modifNom ]

 

 

Merci d'avance

Share this post


Link to post
Share on other sites
  • 0

Bonsoir,

L'importation permet d'importer une sélection d'enregistrements dans une table et de mettre à jour dans cette table de destination des enregistrements déjà existants sur base d'une correspondance (par exemple l'ID) et au besoin de créer les enregistrements qui n'ont pas de correspondance.

https://fmhelp.filemaker.com/help/16/fmp/fr/index.html#page/FMP_Help/import-records.html


bien à toi,

Tanguy

Share this post


Link to post
Share on other sites
  • 0
Le 07/08/2019 à 14:59, CédricDenies a dit :

je voudrais update les enregistrements de  la table À seulement quand les enregistrements ont le même index et que la date de modification de la table tmp_A est plus récent que celui de la Table A 

Bonjour Cédric,

Comme l'a indiqué @tcolles, on peut importer des données dans les enregistrements "correspondants", grâce à une option tout à fait claire dans la fenêtre d'importation. Et cette option sera bien enregistrée dans l'action de script, elle ne "sautera" pas entre 2 exécutions du script. Voir ci-joint une capture de l'option en FMP16 et une en FMP18.

Tu devras donc spécifier le critère "=" entre la rubrique tmp_ACH::index et ACH::index.

Cependant, dans ton cas précis, étant donné qu'il te faut une comparaison de date de modification, tu devras t'y prendre en 2 fois.

1/ importer les dates de modification de tmp_ACH dans ACH, dans une NOUVELLE RUBRIQUE nommée ACH::date_modification_fiche_temp
(par exemple)
(et surtout pas importer dans ta rubrique ACH::date_modification, sinon, tout serait foutu)
(attention, à ce stade, tu n'importe QUE la rubrique tmp_ACH::date_modification vers ACH::date_modification_fiche_temp, rien d'autre ; et en utilisant bien le critère de correspondance ci-dessus)

2/ avoir une rubrique de calcul comparant la rubrique ACH::date_modification et ACH::date_modification_fiche_temp

3/ grâce à cette rubrique calculée, isoler les enregistrement "à mettre à jour"

4/ après avoir isolé ces enregistrements, lancer une seconde importation, dans laquelle tu utiliseras à nouveau l'égalité sur les rubriques index et tu enverras chaque rubrique de tmp_ACH vers son équivalent dans ACH

J'espère que ça t'aidera… Bonne journée !

Jérémie

Capture d’écran 2019-08-09 à 09.35.37.png

Capture d’écran 2019-08-09 à 09.34.54.png

Share this post


Link to post
Share on other sites
  • 0

NB : si tu décides malgré tout de procéder par script avec des Définir rubrique, il faut que tu lies l'occurrence de table tmp_ACH à l'occurrences ACH par la rubrique index.

Ainsi, au lieu de créer des variables et de changer de modèle pour les appliquer dans les rubriques correspondantes, tu pourras faire simple des :

Définir rubrique [ ACH::raison_sociale ; tmp_ACH_liee_par_index::raison_sociale ]

Share this post


Link to post
Share on other sites
  • 0

Just Waow... 

c'est beau tellement c'est "simple" et penser à la mode développeur :)

Merci a vous d'avoir éclairé mes lanternes 👍

 

Donc pour les autres,

1) Dans chaque table, j'ai créer des champs :

        * zk_1 : valeur globale , définie à 1 automatiquement, non modifiable

* zc_ToUpdate : type calcul : si(zlg_modif_tmp>zlg_modif;1;0) a évaluer automatiquement

2) Je fais un premier import (mettre à jour, index à "enregistrement concordant", zlg_modif à importer dans zlg_modif_temp) et je coche "ajouter les autre enregistrement comme nouveaux

  * En arrière plan le calcul de zc_ToUpdate se calcule

3) je fais un deuxième import (mettre à jour, importer les champs nécessaires, index correspondants ET zc_ToUpdate correspondant à zk_1 et décoche de copier les autres comme nouveaux

 

en tout cas merci pour votre aide à tous

 

Edited by CédricDenies
manque une partie

Share this post


Link to post
Share on other sites
  • 0
Il y a 2 heures, CédricDenies a dit :

si(zlg_modif_tmp>zlg_modif;1;0)

Ceci peut s'écrire plus simplement :

zlg_modif_tmp > zlg_modif

(tout court, tout simple ; ça te renverra 1 si vrai et 0 si faux)

 

Il y a 2 heures, CédricDenies a dit :

ET zc_ToUpdate correspondant à zk_1

Fort bonne idée !

(Bon, j'aurais pas mis zk_1 en globale, par contre)

 

Share this post


Link to post
Share on other sites
  • 0
il y a une heure, Jérémie Gimenez a dit :Fort bonne idée !

(Bon, j'aurais pas mis zk_1 en globale, par contre)

 

Pourquoi ne pas le mettre en globale ?  Ça doit valoir 1 dans tout les enregistrements et ça ne peut pas être modifier par l utilisateur 

Share this post


Link to post
Share on other sites
  • 0
3 hours ago, CédricDenies said:

Pourquoi ne pas le mettre en globale ?  Ça doit valoir 1 dans tout les enregistrements et ça ne peut pas être modifier par l utilisateur 

La différence entre une constante et une globale se révèle surtout quand on passe dans un déploiement client - serveur.

La constante : par exemple un calcul qui donne 1, sera toujours égale à 1 dans tous les enregistrements de la table. Comme il s'agit d'un calcul il ne peut être modifié par l'utilisateur.

La globale : aura la valeur qu'on lui donne dans tous les enregistrements et ce pour la session d'un utilisateur. La globale peut avoir une valeur différente en fonction de l'utilisateur. Lors de l'ouverture de la solution, la globale contient la valeur qui était la sienne lorsqu'on l'à uploadée sur le serveur.

 

Donc, classiquement, pour fonctionner avec une données qui a une valeur constante dans tous les enregistrements, pour tous les utilisateurs, tous le temps,...on fait un calcul qui contient une valeur pré-définie dans la zone de calcul.

 


bien à toi,

Tanguy

 

Share this post


Link to post
Share on other sites
  • 0

Comme le dit Tangy une globale se remet a 0 (ou a son état initial si la base est hébergée) a chaque fermeture/ouverture de la base par un client.

Dans mon cas quand je veux vraiment utiliser une globale j'insère une fonction qui la définit dans mon script d'ouverture 😉

dans ce cas si un jour la valeur de cette globale doit changer je n'aurais qu'à la changer dans ce script sans toucher a aucune de mes formules

 

+++

 

Share this post


Link to post
Share on other sites
  • 0

oui c'est vrai "a vide" est bien plus correct 🙂 merci Jeremie

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...