abonnement Unibet Coolblue Bitvavo
pi_2385094
Als ik een relatie probeer te maken tussen 2 verschillende tabellen geeft hij de volgende foutmelding:

----
Kan geen relatie maken waarvoor referentiele integriteit moet worden afgedwongen.
----

De ene tabel heet "Toets" en bevat de volgende attributen:
- Modulecode
- Locatie
- Datum
- Toetscode
- Studentennummer

Het andere table heet "Modulen" en bevat de attributen:
- Modulecode
- Modulenaam
- Omschrijving

Waaraan ligt dit? Ik probeer de twee modulecodes dus in relatie te brengen.

Alvast bedankt!

pi_2385104
quote:
Op woensdag 05 december 2001 14:55 schreef PieuX het volgende:
Als ik een relatie probeer te maken tussen 2 verschillende tabellen geeft hij de volgende foutmelding:

----
Kan geen relatie maken waarvoor referentiele integriteit moet worden afgedwongen.
----

De ene tabel heet "Toets" en bevat de volgende attributen:
- Modulecode
- Locatie
- Datum
- Toetscode
- Studentennummer

Het andere table heet "Modulen" en bevat de attributen:
- Modulecode
- Modulenaam
- Omschrijving

Waaraan ligt dit? Ik probeer de twee modulecodes dus in relatie te brengen.

Alvast bedankt!


Relatie aanleggen betekent dat je de gegevens van een attribuut van de ene tabel OPZOEKT in de andere tabel...
Dus bij één tabel vul je het in en bij de andere tabel zoek je het op...

Dacht ik zo

.
pi_2385107
Je hebt module code als key ?

zelfde veldtype ?

pi_2385116
Ja, dat klopt, maar waarom geeft hij die foutmelding dan?
  woensdag 5 december 2001 @ 14:57:57 #5
16625 robh
Lucas & Gea Review Crew ©
pi_2385119
maak de primaire sleutel in modulecode bijv "modulecodenr"
met autonummering ofzo en niet als (denk ik) dat je nu hebt modulecode.

dan kun je wel referentiele integriteit afdwingen!

Martin Drent, onze profeet.
Vol gas met Burdy!
.
Pimpen met je FOK!-tag
pi_2385157
quote:
Op woensdag 05 december 2001 14:57 schreef robh het volgende:
maak de primaire sleutel in modulecode bijv "modulecodenr"
met autonummering ofzo en niet als (denk ik) dat je nu hebt modulecode.

dan kun je wel referentiele integriteit afdwingen!


Als ik hem op autonummering probeer te zetten dan zegt Access dat het geen gegevens mag bevatten, maar hij bevat helemaal geen gegevens waar ik autonummering aanzet
pi_2385174
R.I. wil zeggen dat als de code in de ene tabel staat, dat deze PERSE in de andere tabel ook moet voorkomen.

Als je al data in de tabellen hebt staan zal het waarschijnlijk zo zijn dat een bepaalde code aan de ene kant van de relatie wel bestaat, en aan de andere kant van de relatie niet.

Klopt dat?

[b]Ik duw liever een Renault, dan dat ik in een Golf stap![/b]
pi_2385175
Ok, hij doet het nu dus wel, ook al zegt Access dat autonummering het niet deed..

dus bedankt!

pi_2385182
quote:
Op woensdag 05 december 2001 15:03 schreef PocketRocket het volgende:
R.I. wil zeggen dat als de code in de ene tabel staat, dat deze PERSE in de andere tabel ook moet voorkomen.

Als je al data in de tabellen hebt staan zal het waarschijnlijk zo zijn dat een bepaalde code aan de ene kant van de relatie wel bestaat, en aan de andere kant van de relatie niet.

Klopt dat?


Ja tuurlijk, dat is toch de hele bedoeling achter relaties in een database afleggen
pi_2385201
quote:
Op woensdag 05 december 2001 15:02 schreef PieuX het volgende:

[..]

Als ik hem op autonummering probeer te zetten dan zegt Access dat het geen gegevens mag bevatten, maar hij bevat helemaal geen gegevens waar ik autonummering aanzet


Datr komt omdat je een tabel die al gegevens bevat niet achteraf van een autonummeringsveld kunt voorzien.

Heb je gegevens in de tabellen staan? Dan moet je zorgen dat die codes allemaal in beide tabellen minimaal 1x voorkomen, anders is je relatie NIET goed ingesteld zoals ie nu is.

[b]Ik duw liever een Renault, dan dat ik in een Golf stap![/b]
pi_2385221
quote:
Op woensdag 05 december 2001 15:04 schreef PieuX het volgende:

[..]

Ja tuurlijk, dat is toch de hele bedoeling achter relaties in een database afleggen


Nee, je mag best een relatie maken waarin deze voorwaarde (integriteit) niet voorkomt.

Met "klopt dat" bedoelde ik of je al gegevens in je tabellen hebt staan. in DAT geval moet je nl. zorgen dat de codes in allebei de tabellen staan als je een integriteit wil instellen.

Je HOEFT echter geen integriteit in te stellen.

De bedoeling van het leggen van relaties is het structureren van gegevens, en het optimaliseren en efficient maken van de databasestructuur, niet "het koppelen van tabellen" an sich.

[b]Ik duw liever een Renault, dan dat ik in een Golf stap![/b]
  Moderator woensdag 5 december 2001 @ 15:36:26 #12
16180 crew  CoolGuy
Money makes the world go round
pi_2385561
Hmm aansluitend hierop wil ik ook even een vraag stellen.
Ik heb een Beaufort database waar veel gegevens in zitten.

Nu wil ik in Acces 2 identieke tabellen maken. De ene tabel bevat de "oude" gegevens. De 2e tabel bevat de "nieuwe" gegevens.
Hier zit een moeilijkheid. De gegevens van de 2e tabel moeten na gebruik naar de 1e tabel gekopieerd worden. De 2e tabel die nu dus weer leeg is, moet dan weer gevuld worden met de gegevens uit de Beaufort database. Waarom ? Ik wil dat er mailtjes worden gestuurd naar mensen als er gegevens zijn veranderd. Een voorbeeld :

Stel in de Beaufort database bij een persoon een functie (van zijn werk). Alle gegevens worden dus gekopieerd in de 1e tabel. Nu verandert die persoon van functie. Dit betekent dat deze veranderde gegevens in de 2e tabel komen. Er vind een controle plaats tussen de gegevens uit de 2 tabellen. Er wordt gevonden dat bij de betreffende persoon een verandering is opgetreden in het veld "functie". Op dit moment moet er een mailtje gestuurd worden naar de helpdesk.
Vervolgens worden de gegevens uit de 2e tabel (de "nieuwe" gegevens) naar de 1e tabel gekopieerd zodat dit de "oude" gegevens worden en de hele cyclus begint opnieuw.
Is dit een beetje duidelijk zo ? Oh ja, voor de slimmeriken onder ons. Als de eerste x dit programma wordt opgestart zitten er geen "oude" gegevens in de 1e tabel. Dit is logisch maar vormt geen probleem. Namelijk. de eerste x zitten er geen gegevens in de 1e tabel. Er worden echter wel "nieuwe" gegevens geimporteerd in de 2e tabel vanuit de beaufort database. Het programma zal dus zien dat "alles veranderd" is en zal dus ook veel mailtjes versturen. Deze kunnen echter genegeerd worden door de gebruikers die de mailtjes krijgen.

Mijn vraag is dit. Er moet dus een query zitten tussen de 2 tabellen die de gegevens uit tabel 2 controleert met de gegevens uit tabel 1. Verder moet er een query zitten tussen tabel 2 en de beaufort database die de nieuwe gegevens naar tabel 2 importeert.
Dan moet er nog een query zijn die het sturen van een mailtje naar de gebruiker voor wie dit van belang is verzorgt.
Hoe moeten die queries eruit zien !!! Trouwens, die tabellen (databaseje dus) hang ik aan een Delphi applicatie. Dit programma kan die mailfunctie dus wel aan wat volgens mij met Access niet kan. Dan nog moet er een query zijn die de mail verzorgt.
Hoe zien dus deze queries er (ongeveer) uit. Ik weet wel dat jullie de veldnamen niet weten, maar zouden jullie me met het principe kunnen helpen ?

Alvast bedankt,

CoolGuy

Breitling - Instruments for Professionals
pi_2385709
Waarom makkelijk doen als het moeilijk kan

Even serieus:
Je moet die 2 tabellen niet scheiden, maar de "status" van een record (oud of nieuw) aangeven met een vinkje of een status_id.
Je moet gegevens in databases alleen scheiden als ze DAADWERKELIJK structureel verschillen, of als daar een HELE goede reden voor is.

Beaufortdatabases ken ik niet, dus ik neem even aan dat de kopieerslag van de BFdb naar Access nuttig is.
Je moet dan bijvoorbeeld bij een record een vinkje maken dat aangeeft dat de record in aanmerking komt voor verzending, en een vinkje dat de record reeds verwerkt is.
Of een status 0 voor "nieuwe" records, en status 1 voor "verzonden" records. Het is VEEEEEEL gemakkelijker om deze recordstatus aan te laten passen en op basis daarvan de records verschillend te behandelen/benaderen, en je hoeft zo niets te kopieren, verplaatsen of weet ik veel wat.

Access kan ook mailen, met de VB-functie sendobject (zoek in help van acces)

[b]Ik duw liever een Renault, dan dat ik in een Golf stap![/b]
  Moderator woensdag 5 december 2001 @ 15:52:29 #14
16180 crew  CoolGuy
Money makes the world go round
pi_2385804
quote:
Op woensdag 05 december 2001 15:46 schreef PocketRocket het volgende:
Waarom makkelijk doen als het moeilijk kan

Even serieus:
Je moet die 2 tabellen niet scheiden, maar de "status" van een record (oud of nieuw) aangeven met een vinkje of een status_id.
Je moet gegevens in databases alleen scheiden als ze DAADWERKELIJK structureel verschillen, of als daar een HELE goede reden voor is.

Beaufortdatabases ken ik niet, dus ik neem even aan dat de kopieerslag van de BFdb naar Access nuttig is.
Je moet dan bijvoorbeeld bij een record een vinkje maken dat aangeeft dat de record in aanmerking komt voor verzending, en een vinkje dat de record reeds verwerkt is.
Of een status 0 voor "nieuwe" records, en status 1 voor "verzonden" records. Het is VEEEEEEL gemakkelijker om deze recordstatus aan te laten passen en op basis daarvan de records verschillend te behandelen/benaderen, en je hoeft zo niets te kopieren, verplaatsen of weet ik veel wat.

Access kan ook mailen, met de VB-functie sendobject (zoek in help van acces)


Ja, maar in dit geval wordt het aantal records in de AccessDB steeds groter en dat mag dus niet Van mijn stage-bedrijf mag dat niet
Breitling - Instruments for Professionals
  Moderator woensdag 5 december 2001 @ 15:53:28 #15
16180 crew  CoolGuy
Money makes the world go round
pi_2385820
Het moet echt op deze manier van hun. Ik vind het goed, ik hoef er strax niet mee te werken, ik hoef alleen nog maar de queries te hebben. Ik hoef het niet te bouwen, dat hoort niet bij mijn opdracht.
Breitling - Instruments for Professionals
pi_2385890
quote:
Op woensdag 05 december 2001 15:52 schreef CoolGuy het volgende:

[..]

Ja, maar in dit geval wordt het aantal records in de AccessDB steeds groter en dat mag dus niet Van mijn stage-bedrijf mag dat niet


Dat wordt het toch wel, immers, tabel 2 is alleen maar een tijdelijke tabel (om te bepalen welke records "nieuw" zijn), die normaliter leeg blijft. Uiteindelijk komen alle records toch in tabel 1.

Even serieus: "hun" hebben dan mooi geen enkel verstand van databases, en ze geven degene die die constructie moet bouwen letterlijk 10x meer werk dan het zou hoeven zijn.

Je moet eigenlijk 1 tabel maken en dan een selectiequerie 2 en 1 gebruiken om de gegevens te scheiden obv hun status (ipv. tabel 2 en 1)

quote:
Alle gegevens worden dus gekopieerd in de 1e tabel. Nu verandert die persoon van functie. Dit betekent dat deze veranderde gegevens in de 2e tabel komen. Er vind een controle plaats tussen de gegevens uit de 2 tabellen.
Op mijn manier ben je met 2 selectiequeries klaar, op "jouw" manier moet je een ingewikkelde structuur en queries gaan bedenken om de gegevens uit de verschillende tabellen te vergelijken, dat is nog niet zo gemakkelijk hoor!
[b]Ik duw liever een Renault, dan dat ik in een Golf stap![/b]
  Moderator woensdag 5 december 2001 @ 16:04:12 #17
16180 crew  CoolGuy
Money makes the world go round
pi_2385981
quote:
Op woensdag 05 december 2001 15:58 schreef PocketRocket het volgende:

[..]

Dat wordt het toch wel, immers, tabel 2 is alleen maar een tijdelijke tabel (om te bepalen welke records "nieuw" zijn), die normaliter leeg blijft. Uiteindelijk komen alle records toch in tabel 1.

Even serieus: "hun" hebben dan mooi geen enkel verstand van databases, en ze geven degene die die constructie moet bouwen letterlijk 10x meer werk dan het zou hoeven zijn.

Je moet eigenlijk 1 tabel maken en dan een selectiequerie 2 en 1 gebruiken om de gegevens te scheiden obv hun status (ipv. tabel 2 en 1)


Nee de gegevens worden met deze constructie. De gegevens worden telkens overschreven, niet BIJgeschreven...
Geloof me nou...die man die het zei schijnt er heel veel verstand van te hebben, en deze constructie is helemaal niet zo veel werk. Ik hoef hem zoals gezegd niet te bouwen alleen maar het technisch ontwerp op te leveren
Breitling - Instruments for Professionals
pi_2386373
quote:
Op woensdag 05 december 2001 16:04 schreef CoolGuy het volgende:

[..]

Nee de gegevens worden met deze constructie. De gegevens worden telkens overschreven, niet BIJgeschreven...
Geloof me nou...die man die het zei schijnt er heel veel verstand van te hebben, en deze constructie is helemaal niet zo veel werk. Ik hoef hem zoals gezegd niet te bouwen alleen maar het technisch ontwerp op te leveren


Jaja, "schijnt"...laat hem mij maar bellen dan zeik ik m wel even af , want dat valt wel mee als ik dit zo hoor.

Overigens, bij- of overschrijven. Je kunt de oude gegevens toch gewoon direct laten verwijderen, na het versturen van de mail, of op gewenste tijdstippen (1x per week bijvoorbeeld)?

Even snel een uitlegje (kunnen wat onvolkomenheden inzitten):

Voorbeeld 1:

1 tabel, volgens mijn omschrijving

- tabel vullen met gegevens uit BFdb, status 0
- bij het veranderen van gegevens (veld "functie") records status 1 laten geven (simpele bijwerkquerie)
- records met status 1 laten verzenden (VB-commando van 1 regel obv selectiequerie)
- records verwijderen (1 deletequerie)

3 queries en een VB-actie


2 tabellen (volgens jouw omschrijving)

- tabel 2 vullen met gegevens uit BFdb
- gegevens wijzigen, bij wijziging aangeven welke records gewijzigd zijn (simpele bijwerkquerie)
- gewijzigde records naar tabel 1 kopieren (toevoegquerie obv selectie)
- gewijzigde records uit tabel 1 verwijderen (verwijderquerie)
- records vergelijken obv veld functie (2-3 subqueries)
- mail sturen voor elke gewijzigde record uit tabel 1 via een aantal ingewikkelde selectiequeries (VB-commando)
- gegevens uit tabel 2 kopieren naar tabel 1 (toevoegquerie)
- gegevens uit tabel 2 verwijderen (verwijderquerie)
- gegevens uit tabel 1 verwijderen (verwijderquerie)

+/- 8 queries en een VB-actie

Wil je nou een goed technisch ontwerp leveren of niet? De meest gemaakte fouten bij het maken van een database zijn een fout structureel ontwerp, en die fout wordt híer gemaakt...

[b]Ik duw liever een Renault, dan dat ik in een Golf stap![/b]
  Moderator woensdag 5 december 2001 @ 20:08:15 #19
16180 crew  CoolGuy
Money makes the world go round
pi_2388256
quote:
Op woensdag 05 december 2001 16:34 schreef PocketRocket het volgende:

[..]

Jaja, "schijnt"...laat hem mij maar bellen dan zeik ik m wel even af , want dat valt wel mee als ik dit zo hoor.

Overigens, bij- of overschrijven. Je kunt de oude gegevens toch gewoon direct laten verwijderen, na het versturen van de mail, of op gewenste tijdstippen (1x per week bijvoorbeeld)?

Even snel een uitlegje (kunnen wat onvolkomenheden inzitten):

Voorbeeld 1:

1 tabel, volgens mijn omschrijving

- tabel vullen met gegevens uit BFdb, status 0
- bij het veranderen van gegevens (veld "functie") records status 1 laten geven (simpele bijwerkquerie)
- records met status 1 laten verzenden (VB-commando van 1 regel obv selectiequerie)
- records verwijderen (1 deletequerie)

3 queries en een VB-actie


2 tabellen (volgens jouw omschrijving)

- tabel 2 vullen met gegevens uit BFdb
- gegevens wijzigen, bij wijziging aangeven welke records gewijzigd zijn (simpele bijwerkquerie)
- gewijzigde records naar tabel 1 kopieren (toevoegquerie obv selectie)
- gewijzigde records uit tabel 1 verwijderen (verwijderquerie)
- records vergelijken obv veld functie (2-3 subqueries)
- mail sturen voor elke gewijzigde record uit tabel 1 via een aantal ingewikkelde selectiequeries (VB-commando)
- gegevens uit tabel 2 kopieren naar tabel 1 (toevoegquerie)
- gegevens uit tabel 2 verwijderen (verwijderquerie)
- gegevens uit tabel 1 verwijderen (verwijderquerie)

+/- 8 queries en een VB-actie

Wil je nou een goed technisch ontwerp leveren of niet? De meest gemaakte fouten bij het maken van een database zijn een fout structureel ontwerp, en die fout wordt híer gemaakt...


Zeg...ehm...ik ga dit morgen voorleggen aan mijn stagebegeleider...als dit wordt toegestaan...dan moet je me wel verder helpen....aub ?
Breitling - Instruments for Professionals
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')