LaMouche39
Messages postés7Date d'inscriptionsamedi 15 mars 2003StatutMembreDernière intervention31 janvier 2013
-
31 janv. 2010 à 10:12
LaMouche39
Messages postés7Date d'inscriptionsamedi 15 mars 2003StatutMembreDernière intervention31 janvier 2013
-
2 févr. 2010 à 07:57
Bonjour,
Informaticien à la retraite (j'ai commencé en 1968....Assembleur, cobol, pascal, Dbase,Clipper 5), je me remets à la programmation avec foxpro 9 (j'aime pas le sudoku !)
Dans la création Base de données je ne trouve pas comment créer une relation entre 2 tables
ex
Date
libellé
Type---------> doit pointer sur une table Type (Code-Libellé-etc..)
Etc..
cela a partir de la fenetre Base de donnée
La connaissance ne sert à rien si elle n'est pas partagée
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 1 févr. 2010 à 19:58
Bonjour,
Que cherches-tu à faire exactement? quand tu parles de "faire une relation...", est-ce que tu penses à quelque chose qui ressemblerait à un SET RELATION?
Il me semble (vu l'exemple que tu donnes), que tu veux créer une FOREIGN KEY. Mais je n'en suis pas certain, il faudrait que tu précises ton objectif (obtenir des données liées, ou maintenir une intégrité référentielle, ou???)
Pourrais-tu nous donner ici la structure de tes 2 tables, avec les index?
PS: je suis aussi un ancien de clipper, je vois bien les pbs que tu peux avoir
michelatoutfox
Messages postés828Date d'inscriptionmardi 5 octobre 2004StatutMembreDernière intervention 7 mai 20131 1 févr. 2010 à 22:10
Si tu veux faire un SET RELATION et des browse, tu peux toujours les faire en VFP9, qui assure une rétrocompatibilité du code.
Mais je ne te le conseille pas, et ce n'est pas ce que tu veux faire.
Il y a dans VFP plusieurs façons d'aborder ce problème, soit par du code, soit visuellement. Et ça peut se faire soit en mode procédural, soit en mode objet.
le préalable va toujours être de poser les index qui seront utilisés par fox. Il te faut une clé primaire sur chaque table (de préférence sur un champ Entier AutoIncrément sans signification pour l'application, ce qu'on appelle une clé subrogée), et dans les tables étrangères, un champ de type Entier, avec un index sur ce champ, qui contiendra la valeur de la clé primaire de l'enregistrement de la table parent.
C'est ce préalable qui va dans tous les cas accélérer l'établissement des jointures, et pemettre au designer de t'assister dans les mode visuels.
commençons par une réponse simple, en mode visuel procédural.
tu vas tout simplement créer une vue locale sur tes tables. Tu peux faire ça depuis la base de données en mode de design (MODIF DATA ... en ligne de commande), ou depuis l'explorateur de projet. Dans les 2 cas, tu va voir apparaitre une fenetre qui te permet d'ajouter les tables qui seront impactées, et tu vas établir les jointures par drag and drop. Le code SQL généré est visible et modifiable.
L'intéret de la vue, c'est qu'elle est persistante. une fois créée, sa définition est stockée dans le database (le dbc), et tu peux l'appeler par un simple use. tu la rafraichis avec un requery, tu peux ensuite l'améliorer en y ajoutant des paramètres.
Si tu veux traiter cette question en mode objet, tu utiliseras la classe CursorAdapter en mode d'accès natif.
Et tu vas ensuite abandonner tes browse pour afficher les cursors résultants dans des grilles (classe grid), que tu instancieras sur des forms.
Vous n’avez pas trouvé la réponse que vous recherchez ?