Kolommen aan elkaar maken

Status
Niet open voor verdere reacties.

Access2010

Gebruiker
Lid geworden
10 feb 2011
Berichten
116
Forum,

Probleemstelling.

Ik heb een aantal gegevens die zich 1 op 1 verhouden. Die zette ik allemaal in 1 tabel.

Nu kwam ik tijdens het verder ontwikkelen aan de grens van 255 velden. Ervaren accessprogrammeurs zitten nu met een vraagteken. Laat dit even voor wat het is.

De database houdt bij alle data betrekking hebbende op een schade. Op een schademelding is er dus maar 1 schadenummer etc., een behandelaar enz. Heel veel een op een!

Nu heb ik een contactformulier gemaakt waarin ik een dossier naboots met alle contacten tussen de verzekeraar, tegenpartij enz.

In de grote tabel schadedata staat een schadenummer (die is altijd uniek) en schadedatum (niet uniek immers er kunnen 2 schades op 1 datum vallen) in de contacttabel staat ook dit schadenummer, eveneens uniek en de schadedatum.

Als ik in de tabel schadedata de schadedatum en het van de verzekeraar ontvangen schadenummer invoer, moet die ook in de de contacttabel komen. Ze moeten dus worden "gelinkt".

In het formulier contact wil ik dus laten verschijnen het schadenummer en de schadedatum. In het formulier kan gezocht worden op zowel schadenummer als schadedatum. De reden is dat het contactformulier (dossier) onder een andere tab hangt.

Hoe ik met relaties ook knutsel dat werkt dus niet. Feitelijk is dit dus een een op een relatie. Schadenummer kan nooit 2 keer voorkomen. Oplossing is om alles in de schadedata tabel te plaatsen maar zoals gezegd, die roept, ik ben vol.


Wie weet de oplossing??

Met dank en groet,

Access2010
 
Je haalt een aantal zaken door elkaar, volgens mij. Als je dermate veel gegevens op moet slaan dat je niet uitkomt met één tabel, dan is er niks op tegen om de gegevens die bij elkaar horen op te slaan in verschillende tabellen. Elke tabel krijgt dan het Schadenummer als sleutelveld. Bij het koppelen van de tabellen koppel je vervolgens het veld [Schadenummer] uit elke tabel aan elkaar. Het resultaat: alle schadetabellen hebbe een één-op-een relatie met elkaar. En meer hoef je er eigenlijk ook niet aan te doen: Zodra je in de tabel SchadeData een schadenummer invoert, hoef je dat niet ook nog eens op te slaan in de tabel SchadeContacten. Immers: doordat de tabellen één-op-één zijn gelinkt, kun je het schadenummer er altijd bij halen. Als ik jouw denkwijze begrijp, kopieer je vermoed ik nog veel meer velden naar de andere gekoppelde tabellen.... Moet je dus vooral niet doen: elk gegeven dat je nodig hebt, sla je maar één keer op. Da's een basisprincipe van databases!

Overigens snap ik dit ook niet:
In de grote tabel schadedata staat een schadenummer (die is altijd uniek) en schadedatum (niet uniek immers er kunnen 2 schades op 1 datum vallen)
Volgens mij is een schadedatum gerelateerd aan de schadecase, en die is dus per definitie uniek. Op het moment dat je per schadecase meer dan één datum invult, is die datum nooit de schadedatum.... Het datumveld is in dit verhaal dus helemaal niet relevant.
Verder heb je op je formulier al een tabobject; ik zou dat zeker verder gebruiken, en alle data groeperen op een eigen tabblad. Voor het formulier maakt het niet uit. Je kunt zelfs nog met subformulieren werken, wat vermoedelijk ook wel nodig zal zijn omdat je het aantal van 255 velden overschrijdt.
 
Michel,

Een een op een relatie maak ik dus in het onderdeel tabellen: relaties.

Een schadenummer is altijd uniek. Al heb je 100 meldingen op dezelfde dag, dan krijgt ieder doissier zijn unieke nummer, immers dan is het bij een verzekeraar nooit meer terug te vinden.

Wat een heerlijke puzzel. Kom je Pinksteren wel mee door.

Access2010
 
Dat vermoedde ik al: mijn verhaal blijft hetzelfde: alle tabellen krijgen het veld Schadenummer als Sleutelveld. Bij het koppelen krijg je dan automatisch de juiste relaties. Overigens kun je maar in één tabel een autonummerveld gebruiken als schadenummer, mocht je dat al willen (lijkt mij niet...). Zelf zou ik, om de werking goed te krijgen, één tabel aanwijzen als 'hoofdtabel' (de tabel die je als eerste invult) en met een toevoegknop in de andere tabellen een nieuw record aanmaken waarbij je het in de hoofdtabel gemaakte schadenummer toevoegt. Dan blijft je formulier met de tabbladen ook altijd goed werken, omdat de tabellen dan altijd goed gekoppeld zijn.
 
Michel,

Die toevoegknop is de simpelste oplossing. Mijn idee is dat je juist zo min mogelijk moet invullen om schrijffouten te voorkomen. Het mooiste is om de schadedatum en schadenummer in het contactform te laten verschijnen.

Ik heb inmiddels de sleutelvelden geprobeerd te maken. In de schadedata tabel geeft access aan: een index of primaire sleutel kan geen Null-waarde bevatten. Ik heb daar dus niets aan een autonummering immers een derde partij verstrekt het nummer. Of is het maken van de sleutelvelden geen optie.

Access2010

Wat simpel lijkt is dus nu weer bijzonder lastig.

Access 2010
 
Mijn idee is dat je juist zo min mogelijk moet invullen om schrijffouten te voorkomen. Het mooiste is om de schadedatum en schadenummer in het contactform te laten verschijnen.
Volgens mij spreek je jezelf hier tegen ;) Schadedatum lijkt mij een veld voor de tabel met schadegegevens. En niet voor de tabel met Contactgegevens. Tenzij je de verschillende contactdatums daarin vastlegt voor de verschillende records die je daarin per case zou kunnen vastleggen. Overigens praat je in dat geval niet meer over een één-op-één relatie, maar over één-op-veel.
De fout die je krijgt komt ongetwijfeld doordat de gegevens in de verschillende tabellen niet overeen komt. Ofwel een (potentieel) sleutelveld bevat voor sommige records geen waarde, wat niet mag voor een sleutelveld, ofwel de gegevens zijn niet gelijk in alle tabellen. Ook dan kan de relatie niet gemaakt worden. Controleer dat met de wizard [Niet-gerelateerde records].
Autonummering is in jouw geval niet zinvol, omdat het schadenummer blijkbaar van buiten komt. Of dat handig is mag je zelf bekijken; het houdt wel in dat je pas records kunt maken als het schadenummer bekend is. Bovendien loop je de kans dat verschillende maatschappijen een zelfde, of heel anders opgebouwd nummer aanleveren. Zelf zou ik (het is jouw database tenslotte) een vaste methodiek gebruiken voor schadenummers, dat als sleutel gebruiken en het nummer dat je van de verzekeringsmaatschappij krijgt opslaan in een apart veld, maar dit niet als sleutel gebruiken. Het is meer een referentienummer in dat geval. Wat mij betreft blijft het simpel :)
 
Michel,

De schadedatum dient in die tabel als referentiepunt. Je geeft aan dat het hier om dit specifieke schadegeval gaat.

Ga alles eens rustig nalezen en overwegen. Wat voor de een simpel is is voor de ander soms een berg om niet over heen te komen.

Access2010
 
Ik zou zeggen: hou het vooral simpel (qua db opzet). En dat houdt voor je db in: zorg voor een uniek schadenummer, dat past in jouw db-opzet. Het zijn jouw records, dus jij bepaalt hoe jouw gegevens er uit zien. dus in jouw db bepaal jij de sleutel. Gegevens die je van externe bronnen krijgt, mogen in mijn ogen ook nooit jouw sleutel bepalen. Hetzelfde geldt voor de schadedatum. Gewoon opslaan in de tabel, het is niks meer als een gegeven. Je krijgt pas problemen als je in één tabel hetzelfde schadenummer meerdere keren moet opslaan met wisselende datums. Maar in dat geval zeg ik: splitsen die tabel, want dan deugt het normalisatieproces niet...
 
Je hebt gelijk, soms wil je teveel en ziet de uiteindelijke gebruiker er de noodzaak niet van in.

Maar, blijven proberen. Oplossen van de puzzle is een leuke uitdaging.

Access2010
 
Probleem met jullie hulp opgelost, mede door een andere opzet van het formulier.

Access2010
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan