Query til at loade fremmednoegler i Access 2007
Jeg arbejder (som frivillig) for en velgoerende organisation (i Belgien, derfor er nogle af de nedenstaaende navne paa hollandsk) og er i gang med at omlaegge deres Access 2007 database der registrerer frivillige og sympatisanter. Der er jeg loebet ind i et problem. Jeg skal foerst give noget baggrund og derefter specificere problemet.Databasen bestaar af en enkel tabel, VrijwilligersSympathisanten, der ikke er normaliseret. Jeg har lavet (blandt andet) to nye tabeller (1) Persoon for navn, foedselsdag, o.s.v. og (2) Adres med gade, postnummer, by o.s.v. (tit er mand og kone begge registreret som frivillige.) Persoon indeholder en fremmednoegle til Adres.
Det er lykkedes mig ved hjaelp af queries med sql statements (og en masse "trial and error") at kopiere data til Persoon og Adres. Nu skal jeg have fremmednoeglen i Persoon til at vise til de rette primaernoegler i Adres. Persoon har (blandt andet) disse felter: voornaam, achternaam, adresid (som er fremmednoeglen.) Adres har id (primaernoeglen), adres, postcode, plaats. VrijwilligersSympathisanten har Voornaam, Achternaam, Adres, Postcode, Plaats.
Som oevelse satte jeg tilsvarende tabeller op i phpMySql. Med det foelgende statement (og blod, sved, og taarer) fik jeg de rette vaerdier in Persoon.adresid:
UPDATE persoon p
SET adresid =
(SELECT id
FROM adres a
JOIN VrijwilligersSympathisanten v ON CONCAT(a.adres, a.postcode) = CONCAT(v.adres, v.postcode)
WHERE CONCAT(p.vornaam, p.achtnaam) = CONCAT(v.Vornaam, v.Achtnaam))
Tilsyneladende forstaar Access ikke CONCAT og vil ikke acceptere JOIN, saa jeg skrev det om til dette:
UPDATE Persoon AS p SET adresId = (SELECT a.id
FROM Adres a
INNER JOIN VrijwilligersSympathisanten v ON a.adres & a.postcode = v.Adres & v.Postcode
WHERE p.voornaam & p.achternaam = v.Voornaam& v.Achternaam);
Jeg lavede samme slags query som jeg brugte til at flytte de andre data og fyldte ovenstaaende statement ind og bevarede og lukkede queriet. Naar jeg saa dobbelklikker paa querien og efter at have besvaret advarslen om at jeg er i gang med at aendre paa data bliver jeg stoppet med denne tekst:
"The operation should be performed on a query that can be updated."
Jeg vil selvsagt vaere taknemmelig for al hjaelp der bidrager til at jeg kan loade fremmednoeglerne og komme videre med projektet.