Realatieprobleem

  • Onderwerp starter Onderwerp starter Risk
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Risk

Gebruiker
Lid geworden
5 jul 2010
Berichten
275
Forum,

Ik worstel de gehele tijd met het volgende.

Ik heb een database met daarin een query. Deze query is de basis voor een formulier met verschillende tabbladen

De query bestaat uit de tabellen Schadedatum, Chauffeursinfo en Tegenpartij. Ik nam alle data van de tegenpartij op in de tabel schadedatum. Probleem die tabel wordt veel te groot. Ergo nieuwe tabel gemaakt onder de naam Tegenpartij

Nu wil ik de tabellen koppelen in de query. Dat met chauffeursinfo is gelukt. In de tabel schadedatum staat een personeelsnummer en idem in chauffeursinfo. Deze zijn met join versie 3 (om het in mijn simpele beleving te formuleren) gekoppeld. Invullen in het formulier dat ik heb gemaakt gaat prima via een subformulier. Koppelde personeelsnummer aan personeelsnummer

Nu komt het. Koppel ik daarbij Schadedatumtabel aan Tegenpartijtabel dan gaat het mis. In het formulier vul ik de data in, komen keurig via het formulier in de tabel Tegenpartij, maar open ik de database opnieuw helaas: Weg uit het formulier terwijl ze wel in de tabel staan. Ik koppelde in beide tabellen: Firmanaam.

Ik heb in beide tabellen in arre moede het veld: Schadedatum gekoppeld maar dan komt er Het opgegeven veld [Schadedatum] kan naar meer dan een tabel verwijzen in de component FROM van uw SQL instructie.

Ben volledig de draad kwijt.

p.s. e.e.a. is het gevolg van een eerdere vraag. De tabel werd zoals gezegd te groot dus ik moest splitsen.

Dank als altijd,

Risk
 
Waarom optie 3 in je relatie tussen Chauffeurs en Schadedatum? Laat je mensen rijden (en ongelukken maken) waarvan je geen record hebt? En die dus niet in dienst o.i.d. zijn? Dapper.... Relaties moet je in beginsel op type 1 (Inner Join) zetten. Uitzondering bij zaken als: je neemt een telefonische bestelling op voor een nog niet ingevoerde klant. Om te voorkomen dat je de bestelling niet kan opslaan (verplicht KlantID) maak je daar een Outer Join. De klant vul je dan later in. Maar in jouw geval?
Is [Firmanaam] in Tegenpartij je sleutelveld? Zou ik niet doen; maak daar een echt sleutelveld voor dat uniek is, bijvoorbeeld een Autonummer. Overigens geldt voor Tegenpartij dus dat je daar wèl een Outer Join kan gebruiken, omdat ik aanneem dat niet bij elk schadegeval een tegenpartij is. Tenzij je een lantaarnpaal aansprakelijk kunt stellen... En registreer je alleen maar schades van bedrijfsbusjes? En wat doe je dan als je een particulier tegenkomt die niet uitkijkt?
Dat splitsen snap ik overigens ook niet helemaal; je wekt de indruk alsof je alle data in één tabel had staan. Dus niet-genormaliseerd. Dat zou voor de Chauffeurs dus zeker niet mogen, maar voor Tegenpartij eventueel nog wel, omdat je die niet als vast gegeven hebt. Doorgaans is een tegenpartij geen vaste relatie, dus hoef je die ook niet als zodanig in een aparte tabel op te slaan.
 
Michel,

Alle gegevens die nodig zijn voor de schadedatabase in een tabel dat gaat niet. Er zijn zoveel zaken die je moet administreren. Je vult de database als ware het een schadeformulier. Zo kom je dus ook tot het vullen van de chauffeur en heb je in de database alleen chauffeurs die een schade hebben gemaakt dan wel bij betrokken zijn geweest.

Maak ik in de tabel tegenpartij (een lantaarnpaal is van een wegbeheerder) en als daar tegen aan parkeer heb ik een tegenpartij. Ik heb dus schadedatum genomen, met ls gevolg de melding als beschreven.

Een uniek sleutelveld zou bijv intern schadenummer kunnen zijn?

Inmiddels snap ik wel wat van access maar de relaties leggen is een probleem.
 
Begrijp me niet verkeerd: zelf zou ik alle schadedetails, zoals Partij en Tegenpartij in een aparte tabel opnemen. Kan overigens dezelfde tabel zijn, maar goed. Dat is aan jou. De relaties lijken mij niet zo moeilijk. Kwestie van een sleuteveld in de brontabel, en een verwijzing naar dat veld in de schadetabel. Met dus geen rare joins die je niet nodig hebt.
 
Michel,

Ik heb in 2 tabellen het veld intern schadenummer gekoppeld. Vul je dit in dan vult de tabel zich met gegevens tegenpartij. Waarom dat niet met schadedatum is gelukt, mij een raadsel.

Weer opgelost (hoop ik)

Risk
 
Schadedatum is niet uniek. Tenzij je er een sleutel van maakt, en dus maar één schade per dag invoert. Lijkt mij niet wenselijk :)
 
Te vroeg een hoera. Was weer toeval. Keurig het formulier uitgebreid op een aparte tab. Invullen, maar opslaan niet dus.

Koppel in de query de beide tabellen A en B op Intern schadenummer. Ik neem alle uit A op en uit B met een gelijk veld.

De tabel B wordt bij invullen dus niet voorzien van dat nummer.

Wat gaat er fout.

Risk
 
Wordt het niet tijd voor een voorbeeldje?
 
Een voorbeeldje is lastig. De database is zo groot en complex. Dan moet ik een Db maken.

Ik heb op een van de tabbladen een subform chauffeur gemaakt ooit. In de Query gekoppeld en dat werkt wel. Vul in het hoofdscherm het personeelsnummer in en kan ook in het subform gegevens veranderen en aanvullen c.q. een compleet nieuwe chauffeur invoeren. Op dezelfde manier de gegevens tegenpartij is nog niet gelukt. Dat is nog gekker en niet te begrijpen voor een nog altijd zijnde leek.


Risk
 
Michel,

Een knipje gemaakt van de query.

Iets gaat er niet goed. Zelfs een subformulier maken van Tegenpartij gaat niet. Alle anderen lukt wel.

RiskQuery.jpg
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan