Jump to content
  • entries
    69
  • comments
    19
  • views
    7647

Le passage de relais, ou comment transférer une valeur d'une table à une autre


David Julot

637 views

 Share

Je vois de temps en temps des demandes concernant le passage de valeurs d’une table à une autre et suite à un commentaire récent d’un lecteur de ce blog, je me suis décidé à consacrer ma chronique dominicale à ce sujet.

Comme quoi, commentez ma chronique et vous aurez, au moins une réponse de ma part, si ce n’est une chronique à part entière. Alors : participez !!!

Depuis FileMaker Pro 7 on a la possibilité de créer un fichier multi-table alors que les versions précédentes ne permettaient qu’une table par fichier. Ce qui pour le passage d’une valeur d’une table à une autre, je devrais plutôt dire d’un fichier à un autre, était résolu par des méthodes qui ne devrait plus exister.

 

Méthodes possibles avec les versions antérieures à la version 7

Il existe deux méthodes pour transférer une valeur d’un fichier à un autre :

  • Copier/coller, méthode traditionnelle mais contraignante ;
  • Lien relationnel, méthode peu utilisée mais plus efficace.

La méthode du copier/coller

La méthode copier/coller utilise le presse-papiers du système d’exploitation pour affecter le contenu d’une rubrique avec une valeur d’une autre table.

Pour cela, on utilise deux scripts, un dans chaque fichier. Le premier copie la valeur à transférer puis appelle le second script. Le second script colle la valeur dans la rubrique souhaitée.

Voici, en exemple, les deux scripts :

# script du premier fichier
Copier [Sélectionner,"rubrique A"]
Exécuter script [Sous-scripts, Externe:"fichier.fp5"]

# script du second fichier
Coller [Sélectionner,"rubrique B"]

Dans le cas où le transfert de plusieurs valeurs s’avérerait nécessaire, il faut, soit avoir plusieurs scripts et sous-scripts, soit concaténer les valeurs avec un caractère séparateur, puis le copier. Dans le second script il faut alors déconcaténer les valeurs pour les coller dans les différentes rubriques.

Autre contrainte, il est d’usage lors d’un développement informatique, de laisser la configuration et les préférences de l’utilisateur en l’état. C’est aussi valable pour le contenu du presse-papiers. Le presse-papiers doit être réservé exclusivement à l’utilisateur.

La méthode du lien relationnel

La deuxième méthode présente le double avantage de laisser le contenu du presse-papiers intact pour l’utilisateur, et d’être plus souple pour le développeur.

Pour utiliser cette méthode, il suffit de créer un lien relationnel entre les deux tables. Ce lien aura la particularité d’utiliser deux rubriques clefs :

  • Soit de type texte ou nombre, avec la même valeur ;
  • Soit de type calcul, avec comme calcul le même résultat.

Dans le premier fichier, on place la valeur à transférer dans une rubrique de type globale. Dans le second fichier, on récupère la valeur via le lien relationnel.

# script du premier fichier
Définir rubrique ["global","rubrique A"]
Exécuter script [Sous-scripts, Externe:"fichier.fp5"]

# script du second fichier
Définir rubrique ["rubrique B","lien::global"]

Dans le cas où il y a plusieurs valeurs à transférer:

# script du premier fichier pour plusieurs valeurs
Définir rubrique ["global A","rubrique A"]
Définir rubrique ["global B","rubrique B"]
Définir rubrique ["global C","rubrique C"]
Exécuter script [Sous-scripts, Externe:"fichier.fp5"]

# script du second fichier
Définir rubrique ["rubrique D","lien::global A"]
Définir rubrique ["rubrique E","lien::global B"]
Définir rubrique ["rubrique F","lien::global C"]

 

Méthode avec FileMaker Pro 7

Réunir toutes les tables au sein d’un même fichier permet de n’avoir qu’un seul script. Il devient donc très facile de réaliser des passages de valeurs d’une table à l’autre. La seule contrainte  consiste à activer le bon modèle avant de récupérer ou  de placer une valeur.

Il est conseillé de créer autant de modèles qu’il y a de tables, en plus des modèles de saisie, d’impression, d’état, etc. Ils ne doivent pas être visibles par les utilisateurs. Ils seront réservés aux scripts et à la maintenance de la base de données.

Créer aussi une table contenant uniquement des rubriques globales, car il faut savoir qu’elles sont dorénavant accessibles quelle que soit la table active, et sans créer de lien.

Il y aura donc à la place de deux scripts, un script du type :

# récupération des valeurs de la table 1
#
Activer modèle ["table1" (table1)]
Définir rubrique [globales::A ; table1::A]
Définir rubrique [globales::B ; table1::B]
Définir rubrique [globales::C ; table1::C]
#
# affectation des valeurs dans la table 2
#
Activer modèle ["table2" (table2)]
Définir rubrique [table2::A ; globales::A]
Définir rubrique [table2::B ; globales::B]
Définir rubrique [table2::C ; globales::C]

Il y a donc avec FileMaker Pro 7 un allègement de liens et de scripts. La structure de la base de données est donc plus légère et le passage de valeurs d’une table à l’autre est plus rapide.

Si on doit passer des valeurs d’une table à une autre, et que cette dernière n’appartient pas au fichier, il faut créer une occurrence de la table.

 

Méthode à partir de FileMaker Pro 8

Avec la méthode précédente, il est nécessaire de créer des rubriques de type globale. Depuis FileMaker Pro 8, on peut utiliser la définition de variables avec l’action de script Définir variable.

Le script sera le suivant :

# récupération des valeurs de la table 1
#
Activer modèle ["table1" (table1)]
Définir variable [$A;Valeur:table1::A]
Définir variable [$B;Valeur:table1::B]
Définir variable [$C;Valeur:table1::C]
#
# affectation des valeurs dans la table 2
#
Activer modèle ["table2" (table2)]
Définir rubrique [table2::A ; $A]
Définir rubrique [table2::B ; $B]
Définir rubrique [table2::C ; $C]

Depuis FileMaker Pro 8, il y a, en plus des allègements apportés avec la version 7, un allègement structurelle puisqu’il n’est plus nécessaire de créer des rubriques globales.

Une fois le script complètement exécuté, les variables et leur contenu disparaissent de la mémoire, c’est ce qu’on appelle des variables locales. Si on veut conserver une variable et son contenu, il faut faire précéder son nom d’un double $, elle sera donc appelée variable globale.

 

C’est tout pour aujourd’hui

Je vous invite à participer au blog, par vos commentaires, corrections ou suggestions. Je tenais, aujourd’hui à vous remercier, oui, vous ! lecteurs de plus en plus nombreux de ce blog. Bon dimanche et excellente semaine !

 Share

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   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...
×
×
  • Create New...