Avatar billede funkystuff Nybegynder
02. september 2002 - 11:03 Der 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.
Avatar billede terry Ekspert
02. september 2002 - 11:10 #1
One way i sto make the field to a unique Key then when you import Access will reject duplicates
Avatar billede funkystuff Nybegynder
02. september 2002 - 11:32 #2
But then Access doesn't import the new files, due to key violation. I need the existing data replaced.
Avatar billede terry Ekspert
02. september 2002 - 11:36 #3
Yes but you say in your question that you do NOT want to replace the existing data.

I think you need to explain waht it is you want
Avatar billede funkystuff Nybegynder
02. september 2002 - 11:40 #4
I just did....
Avatar billede terry Ekspert
02. september 2002 - 12:13 #5
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.
Avatar billede lasse_buck Nybegynder
02. september 2002 - 12:18 #6
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.
Avatar billede funkystuff Nybegynder
02. september 2002 - 12:52 #7
Hvis jeg vil køre update på STOR tabel, gøres det vel med update-forespørgsel. Hvordan får jeg den til at vælge update på kun dubletter?
Avatar billede terry Ekspert
02. september 2002 - 12:55 #8
Why do you want to UPDATE only duplicates? (Hvordan får jeg den til at vælge update på kun dubletter?)
Avatar billede funkystuff Nybegynder
02. september 2002 - 12:58 #9
Det var Lasse's andet foreslag. "Update på eksisterende rækker..." Hvordan gør jeg det i én query?
Avatar billede terry Ekspert
02. september 2002 - 13:10 #10
You CAN NOT do everything in one single SQL!
Avatar billede lasse_buck Nybegynder
02. september 2002 - 13:20 #11
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.)
Avatar billede lasse_buck Nybegynder
02. september 2002 - 13:26 #12
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.
Avatar billede lasse_buck Nybegynder
02. september 2002 - 13:35 #13
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.
Avatar billede terry Ekspert
02. september 2002 - 13:49 #14
lasse>It is not me who needs help!
Avatar billede lasse_buck Nybegynder
02. september 2002 - 14:26 #15
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.
Avatar billede terry Ekspert
02. september 2002 - 14:32 #16
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
Avatar billede funkystuff Nybegynder
02. september 2002 - 14:38 #17
Heftige svar, ikke underligt det hedder Eksperten! Tak for hjælpen.
Avatar billede terry Ekspert
02. september 2002 - 14:38 #18
selv tak :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester