Betreft Base: hoe kan ik een interne relatie in een tabel instellen. Ik wil de partner van een persoon vastleggen, die zelf ook in de persoon-tabel voorkomt. Ik heb het al via een ralatietabel geprobeerd, maar krijg steeds een foutmelding.

Zie bijlage.Foutmelding bij bewerken relatie tussen Persooo-tabel en PersoonPartners-tabel.JPG

Zo te zien is de definitie van de relatie-tabel niet correct.
In de relatie-tabel (PersoonPartners?) moet twee keer een foreign-key (b.v. Persoon_id1 en Persoon_id2) te worden gedefinieerd naar de tabel Personen en dus twee keer een one-to-many relatie . De primary key van de relatie-table is dan Persoon_id1 + Persoon_id2.
Eventueel kan een derde tabel (b.v. TypeRelatie) worden gedefinieerd om het mogelijk te maken dezelfde personen meerdere keren aan elkaar te relateren (b.v. burgerlijke stand en werk-relatie) In dat geval de primary key van TypeRelatie ook opnemen in de primary key van de relatie-tabel.
Ik hoop dat dit helpt!

Zie mijn aanvulling in mijn eerste antwoord boven

Welke database gebruik je? HSQL of Firebird? Firebird is niet stabiel. Aangeraden wordt om HSQL te gebruiken.

Ik heb een test database aangemaakt met een embedded HSQL database.
De volgende acties uitgevoerd:

  1. tabel Personen gemaakt met PK Pers_ID en een text-veld.
  2. tabel Relaties aangemaakt met P-nummer1 en P_nummer2 en een text-veld
  3. PK van Relaties aangepast door P-nummer1 en P-nummer2 te combineren
  4. Relatie aangemaakt tussen Personen (Pers_iD) en Relaties (P-nummer1)
  5. Tweede relaties gemaakt tussen Personen en Relaties:
    Systeem zegt dat relatie al bestaat en geeft optie om aan te passen of toe te voegen: toevoegen gebruikt
    Geselecteerd Pers_ID en P-nummer2 en tweede relatie aangemaakt: geen probleem!

De opmerking van rwestein begrijp ik niet goed: Ik gebruik zelf een Firebird database zonder problemen. Ik zou wel aanraden om niet een embedded database te gebruiken, maar een externe. Dit maakt distributie van aanpassingen in het programmatische gedeelte veel gemakkelijker, zeker als de toepassing voor derden is bedoeld.

Ik gebruik idd de ingebedde HSQLDB, dus ik denk dat het niet daar aan ligt.

Hoi Tom, bedankt weer voor je reactie. Omdat je test veel leek op wat ik ook al gedaan had, heb ik je test ook uitgevoerd met een nieuwe database. Helaas kreeg ik dezelfde foutmelding als eerder vermeld (zie bijlage). Wat gaat er bij mij fout?

Hallo Luuk, Als je dat wilt doen stuur dan een kopie van de database als bijlage, dan zal ik nog een poging doen. Doe dat niet als de database persoonlijke gegevens bevat.

Hoi Tom, ik heb de betreffende database als bijlage toegevoegd. Ik ben hem nog aan het bouwen, dus nog geen data aanwezig. Hoop dat je wat kunt vinden.

Hallo Luuk: Ik heb jouw database aangepast met een relatie-tabel, twee queries en twee formulieren. Ik weet helaas niet hoe ik de database als bijlage moet toevoegen, ik heb dat nog niet eerder gedaan…

Hoi Tom,

Bedankt voor je reactie. Volgens mij heb ik precies gedaan wat je beschrijft. Zie nieuwe bijlageFoutmelding bij bewerken relatie tussen Persooo-tabel en PersoonPartners-tabel.JPG. Toch geeft Base een foutmelding hierover. Ik heb inmiddels de nieuwste versie van LO (7.0.03) op mijn laptop (Win10, met nieuwste updates) geïnstalleerd. Hoopte dat de foutmelding een bug was, die inmiddels verholpen zou zijn. Helaas dus.

Nog meer ideën?

Alvast dank (ook voor anderen die een mogelijke oplossing kunnen aandragen).

Nieuwe bijlage toegevoegd (ging niet in eerder geplaatst commentaar).Foutmelding bij bewerken relatie tussen Persoon-tabel en Partner-tabel.JPG.

20200823 Nieuwe bijlage toegevoegd: MediaCatalogus.odb

Hierbij een bewerking van jouw database met een relatie-tabel, twee queries en daarop gebaseerde formulieren. In de relatie-tabel is zowel een “van-naar” als een “naar-van” veld opgenomen. Dat maakt het mogelijk om de relatie op twee manieren te lezen: “Persoon A is de echtgenoot van Persoon B” OF “Persoon B is de echtgenote van persoon A”
Ik hoop dat je er wat aan hebt!
15982059931313801.odb

Als je de data in de database niet kunt lezen (wat mij steeds niet lukt met gedownloade database…) nog even een aanvullende opmerking:

  1. gebruik bij het maken van een relatie niet de muis om een relatie te “tekenen” maar het relatie-symbool in de menu-balk.
  2. kies de eerste relatie van persoon naar relatie met de juiste velden en druk op OK . Je ziet dan een 1 : N relatie verschijnen,
  3. herhaal nu hetzelfde voor de tweede relatie en je zult zien dat er een tweede 1 : N relatie verschijnt.

Vergeet niet een primary sleutel aan te maken voor de relatie-tabel over de twee relatie-velden
(ALTER TABLE “naam relatietabel” ADD PRIMARY KEY (“sleutelveld1”,“sleutelveld2”) (TOOLS → SQL)relatie1.jpg

Hoi Tom,

Bedankt voor je inspanning.Ik heb jouw database kunnen downloaden, maar bij openen van beide formulieren en beide queries kreeg ik de foutmelding dat de tabel ‘Partners’ niet gevonden werd. Die is inderdaad in het tabellenoverzicht niet te vinden. Heb jij hiervoor gewoon een kopie van de Persoon-tabel gebruikt? Dan kan ik hem even aanmaken.

Alvast dank voor je reactie.

Dag Luuk,
Sorry voor mijn rommelige antwoorden. Zoals ik al opmerkte komen de tabel-definities en de data niet mee wanneer ik een odb meestuur… Maar ik heb inderdaad jouw tabel-definities gebruikt. Wanneer je deze gebruikt zou e.e.a. weer moeten werken nadat de relaties tussen Persoon en Relaties zijn aangemaakt. Zie daarvoor mij vorige opmerking hierboven. De meegestuurde JPG is een voorbeeld met andere tabellen.

Dag Luuk,
Ik weet niet waarom de datadefinities en de data niet meekomen, Ik doe waarschijnlijk toch iets niet goed.
Ik heb inderdaad jouw tabel-definities gebruikt. Als je deze weer toevoegt en de relaties aanmaakt zoals boven in het tweede deel van mijn antwoord is beschreven, zou e.e.a. moeten werken.
(natuurlijk wel even wat gegevens invoeren :wink: )

Hoi Tom,
Na wat experimenteren, is het gelukt om, dankzij jouw aanwijzingen, de relatietabel op de juiste wijze te definiëren. Ik kan nu verder met het bouwen van mijn applicatie (invoer- en zoekschermen, en rapportages, wat nog best lastig is als nieuwe LibreOffice Base gebruiker).

Bedankt voor je hulp in deze.

Groet, Luuk.