Création d'une base de donnée

Signaler
Messages postés
7
Date d'inscription
samedi 15 mars 2003
Statut
Membre
Dernière intervention
31 janvier 2013
-
Messages postés
7
Date d'inscription
samedi 15 mars 2003
Statut
Membre
Dernière intervention
31 janvier 2013
-
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

5 réponses

Messages postés
828
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
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
Messages postés
7
Date d'inscription
samedi 15 mars 2003
Statut
Membre
Dernière intervention
31 janvier 2013

Oui c'est du SET RELATION
Un champs lié automatiquement à une table qui par exemple affice un contenu plus détaillé

Un code intervention par exemple t'affiche les infos correspondante contenue dans une table indexée sur un code Intervention.

Dans Windev on fait ça en wisi on trace les liaison et ça génere les code correspondant.

J'ai pas trouvé dans foxpro de fonction " creer une relation.

table1
- Numero



La connaissance ne sert à rien si elle n'est pas partagée
Messages postés
7
Date d'inscription
samedi 15 mars 2003
Statut
Membre
Dernière intervention
31 janvier 2013

Zut j'ai pas fini mon poste !

Table1
Numero
Date
Libelle
Code Interv ---------> pointer sur table Intervention
Code Client ---------> pointer sur table code client
etc....

En clipper je sais gérer ça en ouvrant les 3 tables , un browse de la premiere + 2 browses annexe pour les 2 tables

mais normalement dans foxpro il doit y avoir un truc automatique non ?






La connaissance ne sert à rien si elle n'est pas partagée
Messages postés
828
Date d'inscription
mardi 5 octobre 2004
Statut
Membre
Dernière intervention
7 mai 2013
1
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.
Messages postés
7
Date d'inscription
samedi 15 mars 2003
Statut
Membre
Dernière intervention
31 janvier 2013

Merci beaucoup,c'est effectivement ça que je cherchais


La connaissance ne sert à rien si elle n'est pas partagée