Avatar billede mlhave Nybegynder
14. december 2004 - 10:06 Der er 6 kommentarer og
1 løsning

Import med overskrivning af dubletter

Jeg har 2 kontorer, der ikke er i direkte kontakt andet end via mail. De skal bruge den samme simple database og indtaste de fejltyper der opstår. Det er ikke en travl database men de vil gerne udveksle/replikere data jævnligt så de hver kan se alle fejltyperne.

Jeg anvender følgende procedurer:

1. Alle nyindtastede poster tildeles automatisk værdien 0 i feltet Lock

Eksport:
1. Vælg alle med værdien 0 i feltet Lock
2. Gør klar til eksport ved at ændre 0 til 1
3. Eksportere alle records med værdien 1 til Excel og sender filen til den anden DB
4. Opdater alle records med værdien 1 til værdien 2

Import:
1. Importer alle records i Excel-filen
2. Opdater alle records med værdien 1 til værdien 2


Jeg eksportere til et Excelark med:
DoCmd.OutputTo acOutputQuery, "Forespørgsel1", acFormatXLS, "test.xls", True

og importere med:
DoCmd.TransferSpreadsheet acImport, 0, "Tabel1", "C:\test.xls", True, ""

PROBLEM!
En gang i mellem ændre de på dataene i en tidligere registreret fejltype,
hvordan sikre jeg at den rettede record overskriver de eksisterende record i den anden database?
Avatar billede mlhave Nybegynder
14. december 2004 - 10:22 #1
Jeg forestiller mig at jeg på formen laver en procedurer ved "Efter Opdatering" som ændrer værdien i feltet Lock til 0, derefter kommer recorden med i Excelarket når der eksporteres...
Avatar billede terry Ekspert
14. december 2004 - 10:32 #2
not 100% sure of how your import routine works so its hard to give a precise solution.
Are you saying that up until now only NEW records have been imported and now you want to UPDATE existing?
14. december 2004 - 10:40 #3
Jeg ville importere dataene i en temp-tabel i første omgang. Herefter kan du f.eks. lave en slette forespørgsel, som sletter de poster fra tabel1, som også findes i temp-tabellen og derefter indsætte hele temp-tabellen vha en tilføjelsesforespørgsel.
Avatar billede mlhave Nybegynder
14. december 2004 - 11:25 #4
thomasjepsen >> Din løsning virker overkommelig, men jeg kan ikke lige overskue at lave sletteforespørgslen, da tabellernes primærnøgle er sammensat af 3 felter. Hvis der kun var et felt i primærnøglen ville jeg skrive noget ala:
DELETE * FROM tabel1 WHERE a IN (SELECT a FROM tabel2);
14. december 2004 - 11:29 #5
Du laver den bare således:

DELETE tabel1.*
FROM tabel2 INNER JOIN tabel1 ON (tabel2.felt1_Date = tabel1.felt1) AND (tabel2.felt2= tabel1.felt2) AND (tabel2.felt3= tabel1.felt3)
Avatar billede mlhave Nybegynder
14. december 2004 - 12:11 #6
Perfekt! Takker :o)
14. december 2004 - 12:12 #7
Anytime og 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