[Résolu] Liaison entre tables. Enregistrements vides.

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
debcuma
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 avr. 2012 15:38

[Résolu] Liaison entre tables. Enregistrements vides.

Message par debcuma »

Bonjour,
J'ai des soucis pour créer les relations entre mes tables.

J'ai consulté
h**p://tiprof.fr/SGBasesDonnees/OpenOffice-Base/ManipRelations/
https://wiki.openoffice.org/wiki/Docume ... ationships

J’ai une table "encycloparfum" (ma table principale) qui contient un champ "référence"
Et une table "ma_collection" qui contient un champ identique
J'ai vérifié que les deux champs que j'associe sont de même nature.

Je les ai défini l’un et l’autre comme clé primaire (est-ce bien ?)

L'objectif est de pouvoir remplir la zone du formulaire « ma_collection » sur fond ovale pour chaque fiche.

Normalement la table « Ma_collection » est, à l’origine, vide.
Dans ce cas mon problème est que la requête associée (et donc le formulaire correspondant) ne renvoie aucun enregistrement (et que donc il est impossible de saisir les informations).

Quand je teste (tel que ci-joint) avec deux infos saisies « à la main » directement dans la table, ma requête faut n’importe quoi : elle renvoie la moitié des fiches avec les premières infos, l’autre moitié avec les secondes infos.
Ce que j’attends est que seules ces deux fiches soient remplies et que les autres apparaissent sans informations.

Je subodore bien que cela vient de la manière donc j’ai créé ma jointure mais je tourne en rond.
Sans doute un problème sur la gestion des champs vides de la relation ?

Nota : il est important que les infos soient dans deux tables différentes (potentiellement il y aura plusieurs tables du type « ma_collection » associé à la même base documentaire.

En espérant que vous pourrez m’aider à voir d’où vient le problème.
Base jointe (sans les photos externes).
Merci d’avance.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par debcuma le 28 févr. 2020 09:49, modifié 2 fois.
Open office 4.1.7 windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Liaison entre tables. Enregistrements vides.

Message par jeanmimi »

Bonjour,
J'ai créé deux ID de Type INTEGER, un dans chacune des Tables pour que la Relation fonctionne.
Normalement le champ Référence ne devrait être que dans la Table encycloparfum
J'ai modifié le formulaire Form_ma_collection
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
debcuma
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 avr. 2012 15:38

Re: Liaison entre tables. Enregistrements vides.

Message par debcuma »

Merci,
Je suis toujours bloqué :
J'ai ce message d'erreur quand je sauvegarde après avoir ajouté un champ integer sur la table macollection
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open office 4.1.7 windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Liaison entre tables. Enregistrements vides.

Message par jeanmimi »

debcuma a écrit :Je suis toujours bloqué :
Il faut supprimer la relation entre les Tables, puis sauvegarder,avant de modifier une des Tables.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
debcuma
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 avr. 2012 15:38

Re: Liaison entre tables. Enregistrements vides.

Message par debcuma »

Merci.
J'ai supprimé les relations entre tables et sauvegardé (j'ai même quitté OO).
Idem en supprimant également les tables elle-mêmes de la zone "relations"

Puis je modifie ma table.
Quand je veux enregistrer mes modifications j'ai d'abord l'erreur ci-jointe :

Si je fais "oui" je retombe sur l'erreur de mon message précédent.
Si je fais "non" le champ n'est pas enregistré comme clé primaire

Une idée ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open office 4.1.7 windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Liaison entre tables. Enregistrements vides.

Message par jeanmimi »

Est-ce que les relations entre Tables, dans les requête, ont été supprimées ?
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
debcuma
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 avr. 2012 15:38

Re: Liaison entre tables. Enregistrements vides.

Message par debcuma »

Oui. Mais les tables apparaissent toujours (sans relation entre elles).

Les "supprimer" dans la requête ne fonctionne pas.
Je les supprime, elle disparaissent, mais ce n'est pas considéré comme une modification lors de la sauvegarde. (L'option "enregistrer" reste d'ailleurs grisée)

Elles réapparaissent quand je ré-ouvre la base.
Open office 4.1.7 windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25182
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Liaison entre tables. Enregistrements vides.

Message par Dude »

Salut,

Il est évident que toucher à la structure d'une base est une opération délicate.
Les relations et/ou les index ne peuvent être modifiés que si la cohérence est assurée.
Sinon on se prend une erreur (c'est ton cas).

Vide le contenu de tes tables ou mieux recommence depuis le début avec une structure propre.

Personnellement, je n'ai pas compris ton modèle relationnel.
Si un item de l'encyclopédie est présent dans 0 ou N collections et si une collection contient 1 ou N items alors il te faut une table intermédiaire.
debcuma
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 avr. 2012 15:38

Re: Liaison entre tables. Enregistrements vides.

Message par debcuma »

Merci à vous.
Dude a écrit :Vide le contenu de tes tables ou mieux recommence depuis le début avec une structure propre.
Ok je vais tout recommencer. Quelques précisions pour repartir sur de bonnes bases.
Cette base sera donnée à plusieurs utilisateurs. Elle contiendra d’une part la table encyclopedie remplie et avec les photos associées. D’autre part la table « Collection » vide que chaque utilisateur complètera s’il le souhaite avec ses propres informations.
C’est la raison pour laquelle j’ai besoin de deux tables. Une qui sera la même pour tout le monde et une que chacun personnalisera.


L’utilisateur fera cela avec un formulaire qui doit renvoyer les enregistrements vides.
C’est aussi pour cette raison que je dois offrir cela sous open-office (je ne peux pas imposer aux collectionneurs d’acheter Access).

Sous access je le fais en quelques instants et j’ai bien ma requète qui renvoie l’intégralité des enregistrements de la table principale même si il n’y a pas d’enregistrement de la table fille associée. Je viens de bricoler ça, ce ne sont pas les mêmes noms de tables ni de champs mais sinon c’est pareil.
Il faudrait donc :
Une relation un à un entre les champs « référence »
Inclure tous les enregistrements de la table principale et pour la table secondaire seulement ceux pour lesquels les champs liés sont égaux.
Puis un formulaire (avec un sous-formulaire ???) pour que l’utilisateur puisse modifier les données.

Dude a écrit :Personnellement, je n'ai pas compris ton modèle relationnel.Si un item de l'encyclopédie est présent dans 0 ou N collections et si une collection contient 1 ou N items alors il te faut une table intermédiaire.
Je n’ai pas l’impression, (ai-je été plus clair ci-dessus). C’est une relation un-à-un.
jeanmimi a écrit :Bonjour,
J'ai créé deux ID de Type INTEGER, un dans chacune des Tables pour que la Relation fonctionne.
Normalement le champ Référence ne devrait être que dans la Table encycloparfum
J'ai modifié le formulaire Form_ma_collection
Je ne comprends pas pourquoi il est nécessaire de créer de nouveaux champs et qu’il n’est pas possible d’utiliser directement le champ Référence qui par construction est celui qui identifie le mieux le produit. Mais je peux en effet le faire si je fais une nouvelle version (le souci c’est que apparemment ça casse tout si on fait des modifications ensuite comme j’ai essayé de la faire).
Ton formulaire ne renvoie que les deux enregistrements existants. L’objectif est de renvoyer tous les enregistrements, même ceux qui sont initialement vides (pour justement que l’utilisateur puisse les renseigner).
Pourquoi une relation n à 1 ?

Merci d’avance.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Open office 4.1.7 windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25182
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Liaison entre tables. Enregistrements vides.

Message par Dude »

debcuma a écrit :C’est une relation un-à-un.
Alors et sauf cas exceptionnel, il n'y a nul besoin de créer une nouvelle table.
debcuma a écrit :Cette base sera donnée à plusieurs utilisateurs.
J'attire ton attention sur le fait que Base reste mono-utilisateur dans l'usage du format natif HSQL.
Passer en accès concurrentiel nécessite la mise en place d'un client/serveur.
debcuma
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 avr. 2012 15:38

Re: Liaison entre tables. Enregistrements vides.

Message par debcuma »

Dude a écrit :
debcuma a écrit :C’est une relation un-à-un.
Alors et sauf cas exceptionnel, il n'y a nul besoin de créer une nouvelle table.
C'est bien pourquoi j'ai expliqué qu'il s'agissait d'un cas exceptionnel.
Dude a écrit :
debcuma a écrit :Cette base sera donnée à plusieurs utilisateurs.
J'attire ton attention sur le fait que Base reste mono-utilisateur dans l'usage du format natif HSQL.
Passer en accès concurrentiel nécessite la mise en place d'un client/serveur.
Chaque utilisateur aura sa propre copie de la base initiale. Chacune de ces copies sur chacune des machines de ces utilisateurs sera mono-utilisateur.
Les modifications apportées par chacun à sa propre base (et tout particulièrement à la table "macollection") ne concerneront que sa propre copie et n'ont pas vocation à être répercutées.

Un peu comme un livre de cotation. Sur chaque exemplaire du livre (identique au départ) chaque lecteur annote, coche les produits qu'il possède .... sur son "exemplaire mono-utilisateur".
Open office 4.1.7 windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Liaison entre tables. Enregistrements vides.

Message par jeanmimi »

debcuma a écrit :Puis un formulaire (avec un sous-formulaire ???) pour que l’utilisateur puisse modifier les données.
A tester le formulaire Form_Créer_Ma_Sélection dans cette version avec la requête ma_collection
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
debcuma
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 avr. 2012 15:38

Re: Liaison entre tables. Enregistrements vides.

Message par debcuma »

jeanmimi a écrit : A tester le formulaire Form_Créer_Ma_Sélection dans cette version avec la requête ma_collection
ça m'a l'air très bien, Merci. Je teste un peu plus ce WE, je clôturerai le post dès que j'ai fini :)

Détail : Si l'utilisateur tente de créer un second enregistrement pour une même référence dans le sous-formulaire il y a (c'est normal) un message d'erreur. Existe-t-il un paramétrage lui interdisant cela en amont ?
Open office 4.1.7 windows 10
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Liaison entre tables. Enregistrements vides.

Message par jeanmimi »

debcuma a écrit :Si l'utilisateur tente de créer un second enregistrement pour une même référence
Si l'enregistrement a déjà été fait, il le constatera sur le formulaire, en bas, puisque les champs seront remplis.
Il pourra par contre modifier les données enregistrées auparavant.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
debcuma
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 avr. 2012 15:38

Re: Liaison entre tables. Enregistrements vides.

Message par debcuma »

Tout semble fonctionner parfaitement. Merci à vous.
Open office 4.1.7 windows 10