Relation permanente entre tables

cs_hassoub Messages postés 33 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 25 avril 2011 - 23 avril 2011 à 19:45
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 - 4 août 2011 à 16:56
Bonsoir,

J'utilise VFP9 . J'ai une forme et Son Environnement de données
contient 02 vues :

listecarte
vrestauration

Sur la forme, j'ai :

1- un textbox1, son controlesource = listecarte.code
2- un textbox2, son controlesource = vrestauration.daterepas

dans forme.load ce code qui met en relation les 02 vues:

SELECT listecarte
SET RELATION TO Listecarte.idetudefk INTO Vrestauration ADDITIVE

et dans forme.textbox1.valid ce code :

IF !EMPTY(this.Value)
SELECT listecarte
SET FILTER TO listecarte.code == ALLTRIM(this.value)
REQUERY()
thisform.Refresh()
ENDIF
SET FILTER TO

le textbox2 n'affiche pas la valeur de vrestauration.daterepas.Pourtant
si je 'liste' vrestauration je n'ai que l'enregistrement lié à listecarte.

Est il possible d'avoir le textbox2.value rafraichis par la valeur de l'enregistrement.

Merci pour votre aide.

A.MAHALLA

7 réponses

michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
24 avril 2011 à 15:11
Bonjour,

quelques questions, pour pouvoir te répondre mieux ensuite:
[list]
[*] s'agit-il de vues pointant vers des dbf ou vers des tables d'un autre SGBDR ?
[*] pourrais-tu nous indiquer la structure des 2 tables ?
[*] as-tu vérifié le fonctionnement de ta relation avec des browse ?
[*] pourquoi avoir codé dans le VALID de textbox1 ?
/list

et enfin, pourquoi veux-tu utiliser une relation? pourquoi ne pas faire une vue qui fasse la jointure souhaitée,
0
cs_hassoub Messages postés 33 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 25 avril 2011
24 avril 2011 à 21:05
Bonsoir,
1- Les deux vues pointes vers des tables dbf.
2- les vues sont 'la copie exacte' des tables suivantes:
pour la vue listecarte:
- idcartepk Entier(auto) Clé primaire
- idetudefk Entier Clé candidate
- idactive Entier
- n_carte Entier
- a_carte Entier
- maticulencode Caractere 10
- ncode Entier
pour la vue vrestauration:
- idrestaupk Entier(auto) Clé primaire
- idetudefk Entier
- Dateheure Dateheure
- typerepas Entier
- Statut Entier
3- la relation marche bien dans le browse, si je change le curseur dans la vue listecarte le curseur change aussi dans la vue vrestauration et pointe l'enregistrement correspondant.
4- Par habitude, cela me permet de rechercher la valeur de listecarte et de l'afficher.

5- C'est une très bonne suggestion pour ce cas là que je vais adopter. Cependant est il possible d'utiliser cette relation et d'avoir le même résultat?

Merci.

A.MAHALLA
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
25 avril 2011 à 16:12
est-ce que les valeurs correctes sont affichées après l'init du form (avant toute saisie)?
et que veux-tu faire exactement? tu veux déplacer le pointeur d'enregistrement dans la vue listecarte ? et tu veux faire ça en saisissant la valeur recherchée dans le textbox1?

c'est ça?
0
cs_hassoub Messages postés 33 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 25 avril 2011
25 avril 2011 à 21:27
Bonsoir,
Mille excuses de vous avoir induit en erreur. En fait, Textbox1 son control source est vide. Textbox1 sert à rechercher l'enregistrement correspondant à la valeur du textbox1 pour ensuite afficher l'ensemble des valeur souhaitée de la vue listecarte mais aussi et surtout les valeurs de vrestauration.
maintenant :
1- Il n'a pas de valeur affichée pour listecarte car listecarte.NoDataOnLoad = .T. dans le D.E. de la forme.

2- Je ne veux pas déplacer le pointeur dans la vue listecarte, mais rechercher la valeur de textbox1 correspondante dans la vue listecarte.

Excusez moi et merci pour votre aide.

A.MAHALLA
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
26 avril 2011 à 10:22
Ah, mais avec les bonnes informations, ça va tout de suite être plus simple à traiter

En restant dans ton architecture, la solution est de paramétrer la vue ListeCarte, sur le champ Code.
Une vue est dite "Paramétrée" si sa clause WHERE comporte un paramètre. Pour qu'une expression dans une clause WHERE soit un paramètre, il suffit que l'expression à évaluer soit précédée du signe ?. Tu peux construire ta vue paramétrée soit directement dans le code, par exemple SELECT ... FROM ... Where Code = ?mavaleur , ou bien passer par le générateur de vue, et c'est dans l'onglet Filtre que tu vas mettre ce ?mavaleur.

Une fois que ta vue est paramétrée, alors il suffit d'affecter la valeur recherchée à la variable, avant le REQUERY(). Pas besoin de set filter.
Réfléchis bien à l'expression de ta clause WHERE : veux-tu vraiment faire un trim et une égalité stricte sur ce trim? ou bien préfères-tu un LIKE ?
Pense également à traiter le cas où le requery ne donne pas de ligne en retour (sa valeur de retour sera 0).
0
zinu Messages postés 2 Date d'inscription samedi 20 novembre 2010 Statut Membre Dernière intervention 4 août 2011
4 août 2011 à 14:52
bonjour Mr michel jai une question svp comment creer des realtion dans foxpro v 9
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
4 août 2011 à 16:56
Bonjour,

que veux-tu faire exactement? de quelles "relations" parles-tu?
ce mot "relations" est équivoque en VFP, il peut recouvrir 3 concepts différents:
il y a en VFP une syntaxe ancienne (provenant du noyau xBase du langage), qui permettait de faire ce qu'aujourdhui on fait avec une jointure SQL. Cette vieille syntaxe (SET RELATION ...) fonctionne toujours mais je te la déconseille; elle permettait de synchroniser le déplacement des pointeurs dans différents jeux d'enregistrements en créant un filtre dynamique.
Aujourd'hui, on fera la même chose en effectuant une jointure SQL pour obtenir un jeu d'enregistrement.
Et puis il y a les relations permanentes, qui sont un terme impropre (mais qu'on retrouve dans l'aide, malheureusement), et qui sont une étape dans la définition de l'intégrité référentielle.

Donc, que veux-tu faire? quel est ton objectif?
0
Rejoignez-nous