Opgelost Toevoegquery geeft sleutelconflict maar ik zie niet waar de fout zit

Dit topic is als opgelost gemarkeerd
Status
Niet open voor verdere reacties.

Irenemartine

Gebruiker
Lid geworden
13 dec 2023
Berichten
18
Ik ben onlangs begonnen met Access en dacht nu heel simpel een paar records toe te voegen aan een bestaande tabel.
Access geeft echter aan dat de twee records niet zijn toegevoegd ivm sleutelconflicten. Ik zie niet waar deze conflicten zitten, maar het zal wel heel simpel zijn :)
Ik gebruik Access van Office 365.
Bijgevoegd een testDB en de melding van Access.
 

Bijlagen

  • Melding toevoegquery.png
    Melding toevoegquery.png
    14,3 KB · Weergaven: 5
  • Toevoegtest.zip
    29,9 KB · Weergaven: 5
Je vraag staat (al) op Opgelost; betekent dat dat je er al uit bent?
 
Om even te prikkelen: het probleem is simpel op te lossen door wat kleine veldaanpassingen (het is een bekend bugje). Heb je die gevonden? Daarnaast vind ik je toevoegquery redelijk 'gevaarlijk', want als je hem 4 keer uitvoert, heb je de toe te voegen records er vier keer in staan. Lijkt mij niet de bedoeling. Ook hier is een (iets minder simpele) oplossing voor :).
 
Dank je voor je reactie. Het is me uiteindelijk gelukt om de data toe te voegen, maar om nu te zeggen dat ik het bugje gevonden heb is te veel gezegd denk ik. Dus als je het zou willen uitleggen dan graag!
Kun je ook aangeven hoe je de toevoegquery zou maken om hem minder 'gevaarlijk' te maken?
 
Leg eens uit hoe het je is gelukt, dan vertel ik wat het ‘bugje’ is :).
 
Om eerlijk te zijn weet ik het niet meer precies. Ik heb handmatig een record toegevoegd aan de hoofdtabel, maar de autonummering (id veld) werd verkeerd opgehoogd (Met een getal dat al in de tabel stond, en dat werkt dus niet). Dit heb ik enkele keren herhaald, tot er een nr werd gegenereerd dat nog niet in het ID veld voorkwam. Daarna werkte het.
ik hoop dat je het snapt :)
 
Dat is een vreemd verhaal; autonummers worden automatisch opgehoogd, daar kun je zelf niks aan doen. En als je een nieuw nummer maakt, worden reeds gebruikte nummers genegeerd. Stel dat je 14 records hebt, en je voegt een paar keer dezelfde records toe (wat jouw query dus doet). Dan wil je die dubbele records dus verwijderen. Als je dat doet, en je voegt daarna weer nieuwe nummers toe, dan zal je zien dat de verwijderde recordnummers niet meer terug komen. Access kan/doet dat dus nooit. En bij jou wel? Dat is dus heel vreemd.

Ik kon in jouw database met jouw query ook geen records toevoegen. Dat heb ik opgelost door de veldeigenschappen aan te passen. Jij had als veldlengte voor alle velden 255 tekens staan (meer kan niet), en als Notatie @. Dat laatste is dus de bug. Als je dat teken op de tekstvelden verwijderd, werkt de query wél. Maar dat heeft dus ook niks te maken met het Autonummer.

Wat ik vaak doe als er records zijn verwijderd, of iets anders niet werkt: de database comprimeren en herstellen. Dat herstelt sowieso de Autonummering, zodat alle nummers weer beschikbaar zijn (dus ook de verwijderde records).
Daarnaast heb ik de query dus aangepast, zodat het onmogelijk is om dubbele records toe te voegen door de query twee keer uit te voeren. De query ziet er dan zo uit:
Code:
INSERT INTO Hoofdtabel ( Plaatsnaam, Naam, Sitecode, Soort, [Betaald/Gratis], Breedte, Lengte )
SELECT ToeTeVoegen.Plaatsnaam, ToeTeVoegen.Naam, ToeTeVoegen.Sitecode, ToeTeVoegen.Soort, 
ToeTeVoegen.[Betaald/Gratis], ToeTeVoegen.Breedte, ToeTeVoegen.Lengte
FROM ToeTeVoegen
WHERE (ToeTeVoegen.Naam Not In (SELECT a.Naam FROM Hoofdtabel as a WHERE a.Plaatsnaam = ToeTeVoegen.Plaatsnaam));
Deze query controleert dus of de combinatie Naam + Plaatsnaam niet al bestaat in de database.
 
Dank je voor je snelle reactie. Ik vond het ook heel vreemd dat die nummers dubbel werden aangemaakt, maar zo was het wel. Waarschijnlijk als ik het probeer te reproduceren dan lukt het niet :) . Maakt niet uit, het werkt nu. En bedankt voor je stukje code om duplicaten te voorkomen!
 
Ik zal nog eens testen met jouw originele database, en die eerst comprimeren. Kijken wat er dan gebeurt.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan