02. september 2002 - 11:03Der er
16 kommentarer og 2 løsninger
Opdatering af tabel
Jeg har en mindre tabel (excel), som skal importeres ind i en større tabel (acces). Hvordan gør jeg dette sådan at jeg undgår dubletter? Dvs. hvis f.eks. en post med et navn i den store tabel allerede eksisterer, bliver erstattet med posten fra mindre tabel, med samme navn.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Well I think the easiest way is to import to a temp table (or link) the Excel sheet and then make a query to DELETE those which already exist and then another query which appends (INSERT) all from the temp.
There is a query wizard (find duplicates) you can us eto make a query which can be used to find those which alreday exist.
En mulighed er at slette dubletterne FØR import: Vi kalder den store tabel i Access for STOR. Start med at importere data i en midlertidig tabel LILLE.
DELETE stor WHERE id in (SELECT id from lille); INSERT INTO stor SELECT * FROM lille;
Hvis du ikke kan få lov til at slette dubletterne først, kan du anvende en temporær tabel, køre UPDATE på eksisterende rækker i STOR og til sidst indsætte de resterende rækker fra LILLE.
Terry: You want to import (insert) all rows, but the import will fail since some rows (IDs) already exist. It is not possible to overwrite existing rows, so you must delete them or simply update their values.
Det er klart nemmest, hvis man kan slette de eksisterende dubletter i STOR først, og så bare indsætte alle rækker fra LILLE.
Det kan sagtens lade sige gøre, at lave en update, men den bliver rigtig grim, hvis der er mange felter: UPDATE stor SET felt1=(SELECT felt1 FROM lille WHERE lille.id = stor.id), SET felt2=(SELECT felt2 FROM lille WHERE lille.id = stor.id), SET felt3=(SELECT felt3 FROM lille WHERE lille.id = stor.id), ... osv. ;
Denne update er rigtig grim, da den gennemløber hele LILLE tabellen for hvert felt, som skal opdateres. (Hvis man anvender en cursor kan dette klares med kun et gennnemløb, men jeg har ikke prøvet at anvende cursors i Access.)
Terry. Nope, not one statement. Three steps: 1. Import data into temporary table (LILLE). 2. Delete rows in STOR with matching primary keys (ID). 3. Insert all rows from LILLE into STOR. OR 1. Import data into temporary table (LILLE). 2. Update rows in STOR with matching primary keys (ID) - making the rows idetical in both tables. 3. Insert all rows (that are not already in STOR) from LILLE into STOR.
Måske kan man lave en BEFORE INSERT EVENT som foretager en update, hvis man forsøger at overskrive en primary key række. Jeg har set at Terry er god til EVENTS. Det er jeg ikke ;o) http://www.eksperten.dk/spm/251062
Denne event skal KUN være aktiv, når du udfører din import.
Terry> I know! I use Oracle and know only the basics of Access. You look like an expert in Access and EVENTS :o)
I saw some stuff you did with events and thought that could be a way to solve funkystuff's problem. You may be able to solve his problem with events - my Access skills are not sufficient yet.
I would suggest making queries and then placing a button on a form then in the buttons CLICK event you can use SOMETHING like this
DoCmd.Openquery "qry1" DoCmd.Openquery "qry2"
and so on until the job gets done
you can also use docmd.setwarnings False at the start of your code you get no warning message and then docmd.setwarnings True at the end to make sure you get further warnings
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.