Avatar billede klid Nybegynder
14. februar 2004 - 01:30 Der er 16 kommentarer og
3 løsninger

Data fra Excelll til Acess

Alt det med Excell er jeg  - hvis jeg nu selv skal dsige det - ret god til. Men den anden del af det - Access - har ejg ikke store erfaringer med.

Nu har jeg en mængde data, som skal fra min Excelle ind i flere forskellgie tabeller i en accessbase, som jeg ikke selv har lavet, og som jeg helst ikke skal ændre (for meget) på. Men data skal dig ind.

I Acessbasen er der en formular (tror jeg det hedder) en slags spørgeskema, hvor man kan sætte dataposter ind one by one. Mange felter i posterene regnes automatisk ud efter man har tastet andre felter ind. Den er ret træls at taste ind i, fordi den hele tiden skælder ud over at man ikke har udfyldt dit, og heller ikke dat. Desuden er der rigtigt mange poster.

Jeg har forsøgt at lave en SQL streng og fylde i basen med den, men det vil den ikke. Så har jeg forsøgt at læse på lektien, men det bliver jeg ret forvirret af. 

Derfor tlænkte jeg om DU ved hvordan jeg nemt og enkelt flytter mine data fra Excelle til Access.
Avatar billede mugs Novice
14. februar 2004 - 07:45 #1
Det er vi da mange der kan hjælpe dig med. Jeg tror det er 3. gang i denne uge spørgsmålet er rejst. Der er flere måder at gøre det på, men denne er det mest simple:

DoCmd.TransferSpreadsheet acImport, 0, "Import", "C:\Mappe1", True, ""

Du skal åbne en formular (en eksisterende eller en ny) i Designvisning. Herefter tager du en kommandoknap fra værktøjskassen, og placerer den et sted på formularen. Højreklik på den > Egenskaber > Fanen Hændelser > Sæt markøren på linien VedKlik (Engelske versioner: OnClick) og tryk på de 3 små ... i højre side.

Du kommer nu ind i Access VBA-editor, og herindsætter du ovenstående kode hvor markøren står ig blinker imellem de 2 linier Private Sub... og End Sub.

Gå i formularvisning og tryk på knappen, nu vil Access oprette tabellen "Import" og hente alle Excell's poster herind.

Nu skal du så have posterne fra Import-tabellen fordelt til andre tabeller. Det kan du gøre med en SQL-sætning Insert Into... eller med tilføjelsesforespørgsler, hvori du evt. kan oprette kriterier der udvælger poster, hvis de ikke allesammen skal overføres til de endelige tabeller.

Men du skriver, at Access brokker sig hvis ikke du har udfylsr dit eller dat. Derfor må du først undersøge hvilke felter i dine tabeller hvis egenskab "Obligatorisk" (Engelske versioner: Required) er sat til ja. Det betyder at feltet kræver indtastning, ellers vil posten ikke blive udfyldt. Du kan Evt. prøve at køre en tilføjelsesforespørgsel med Import-tabellen som kilde. Hvis der er felter i destinationstabellen der kræver indtastning, vil du  få en fejlen " x antal poster blev ikke overført på grund af fejl i valideringsregler". Så må du enten sørge for, at felterne er udfyldt i Excel eller importtabellen, eller rette egenskabern Obligatorisk.

Du laver en Tilføjelsesforespørgsel i Access databasevindue > Fanen Forespørgsler > Ny. I designgitteret dobbeltklikker du på Import-tabellen og lukker dialogboksen. Derefter klikker du på Forespørgsler på menülinien og vælger Tilføjelsesforespørgel, i dialogboksen vælger du den tabel, der skal modtage de nye poster og Luk.

I Designgitteret dobbeltklikker fu nu på det første felt i Import og det hentes ned i designgitteret. I linien "Føj Til" skriver du nu navnet på det felt i den Tabel der skal modtage data.

Luk herefter forespørgslen og kør den fra databasevinduet.
Sådan bliver du ved, indtil alle dine data fra Import-tabellen er fordelt til de korrekte tabeller.

Det lyder ret indviklet, men er faktisk såre simpelt. Jeg skal på arbejde, men hvis du lægger din e-mail, kan jeg iaften (Ca. 19:00) sende dig et eksempel.
Avatar billede mugs Novice
14. februar 2004 - 08:02 #2
Du skal passe på med at prøve at importere flere gange, idet Access så blot vil tilføje alle poster fra Excel til Import-tabellen. Du kan evt. slette Import mellem hver gang du importerer. Hvis Import ikke eksisterer, vil Access oprette den.

Men bedst af alt:

TAG EN KOPI AF DIN DB, OG LEG MED DEN.
Avatar billede klid Nybegynder
14. februar 2004 - 11:07 #3
Mange tak - jeg vil se at komme igang med at lege, selvom meget af det du skriver er volapyk (for mig!). Men det er jo en opskrift, så må vi se om der kommer en kage ud i den anden ende. Men hav lidt tålmodighed - der er meget jeg skal lære.

Der var lidt kludder med søgefunktionen i går, så derfor har jeg måske ikke søgt tilstrækkeligt grundigt efter tidligere svar. Nu prøver jeg i hvert fald dit.
Avatar billede mugs Novice
14. februar 2004 - 19:34 #4
Det tager tid at bage en god kage og så skal der kæles for den. Men hvis nogen af ingredienserne er uforståelige, vender du blot løbende tilbage.
Avatar billede mugs Novice
14. februar 2004 - 19:36 #5
Ps.: Hvis du synes det er nemmere at lave en makro i stedet for at lave importen i VBA, kan du bruge handlingen "OverførRegneark" (TransferSpreadsheet) og så udfylde handlingsargumenterne nederst til venstre.
Avatar billede klid Nybegynder
19. februar 2004 - 01:00 #6
NU er jeg endelig nået til vejs ende - der var en smule mere finish i Excelle end jeg lige regnede med - tabellen der skal over er på 1500 rækker og 100 kolonner. Så der er mange data - og der kommer flere.

Men den vil ikke. Den melder fejl - uden at specificere fejlen nærmere. Jeg har kolonneoverskrifter med i min excellefil - det er måske en fejl?

Det var nu faktsik ogsåsvræt at følge forklaringen helt præcist - efter oprettelsen af den der komandoknap ryger jeg ind i en menu jeg ikke kan komme ud af uden at vælge  nogle handlinger - og er det det samme som hændelser?

Det med den der markro forstår jeg slet ikke.
Avatar billede mugs Novice
19. februar 2004 - 06:01 #7
I stedet for denne VBA-sætning, kan du bruge en makro

DoCmd.TransferSpreadsheet acImport, 0, "Import", "C:\Mappe1", True, ""

Når du laver en kommandoknap, vil du komme ind i en menu hvis dine kontrolelementguider er slået til. Du kan frakoble dem ved at trykke på tryllestaven på din værktøjslinie. Men det burde også være muligt at annullere denne dialogboks.

Når du vælger an handling opretter du en hændelsesprovedüre der afspiller en handling.

Kan du evt. sende dit Excel-ark og Access-db, så vil jeg se på det iaften:

mugs@mail.dk
Avatar billede klid Nybegynder
19. februar 2004 - 17:17 #8
Nu har jeg fået det ind i access - ikke med de der VBA formler, men med importfunktionen i access. Der er dog nogen poster den ikke har fået med, men det laver den så en særlig rapport over, så det sidder jeg nu og optimere på. Det tager også lang tid, men når det er på palds kommer sidste halvedel - at få data ud i de tabeller hvor de høre hjemme - det lyder altså også lidt besværligt, hvis det skal gøres manuelt med dem alle samme.

Tabellerne hedder F1, F2 F3 osv.

En af kolonnerne der nu er importeret indeholder så en "F-værdi" - altså hvis værdien i denne kollonne i række y er x, så skal data i hele rækken y ind i tabel FX.

Kan det automatiseres???
Avatar billede terry Ekspert
19. februar 2004 - 18:06 #9
INSERT INTO FX SELECT * FROM F1 WHERE F1.y = 'x'

x in this case is a text value, if it is numeric then remove ''
Avatar billede mugs Novice
19. februar 2004 - 18:06 #10
"nogen poster den ikke har fået med, men det laver den så en særlig rapport"
Er der ikke tale om en tabel med importfejl?

Hvis du lægger din e-mail kan jeg brygge et simpelt eksempel sammen iaften.
Avatar billede klid Nybegynder
19. februar 2004 - 22:09 #11
>mugs - netop det der er! Jeg tror jeg gyller lidt i det m3ed tekst og tal og sådan noget.

Der er tre "obligatoriske" poster, som SKAL med og skal ind for at det hele virker.
Det er to "talfelter" - de skullevære simple nok, og så et datopåst, efter formlen
__-__-____  dvs fx 19-02-2004 - understregerne forsvinder når man taster ind. Hvis du laver et eks m¨å de tre poster meget gerne indgå.

mail er klidØget2net.dk, hvor "Ø" udskiftes med @ (det er bare en lille antispamforanstaltning)







Jo det er lige
Avatar billede klid Nybegynder
19. februar 2004 - 22:11 #12
>terry jeg glemte lige at kommentere dit svar. Men altså - det ser jo meget effektivt ud, men jeg er altså meget mere novice end som så - hvor skal det stå??
Avatar billede terry Ekspert
22. februar 2004 - 11:45 #13
you mke a new query copying th eexample directly into the SQL.

If you still dont have a solution you can send your dB to me and I will take a look for you
NOSPAM@eksperten@santhell.dkNOSPAM

remove NOSPAM
Avatar billede klid Nybegynder
22. februar 2004 - 15:22 #14
Tak til mugs for tilsendte, og tak til terry for dit forslag. Det er ganske forfærdeligt, og skydelses utvivlsomt mine begrænsede evner, men jeg kan ikke få det til at virke, faktisk ved ejg dårligt nok hvad der er galt.

Men Mugs filer virker jo fint i hans miljø - i hans filer. Det er også lykkes mig at importere min egene excelldata med den der formatknap, men det der med at få dem delt ud i underfiler - det halter det med. Det er simpelthen den "tilføj" ting du har lavet jeg ikke kan kopiere.

Måske hænger det sammen med at nogen af feltnavnene er med mellemrum fx "Mit felt". Jeg har forsøøgt med ASP og SQL og ADB og hvad det alt sammen hedder, og der vil den ikke når der er mellemrum i feltnavnet.

Terry - dit svar har jeg lige set - forsøger med det nu - men er det i princippet ikke det samme som INSERT INTO xxx (.....) values(...) - som altså netop ikke virker.
Avatar billede mugs Novice
22. februar 2004 - 15:27 #15
Hv is du benytter feltnavne med mellemrum i VBA skal det være.

Mit_felt evt. [Mit felt]

Du er velkommen til at sende din db:

mugs@mail.dk
Avatar billede terry Ekspert
22. februar 2004 - 15:28 #16
22/02-2004 11:45:46
you can send it if you want!
Avatar billede terry Ekspert
25. februar 2004 - 19:03 #17
.
Avatar billede klid Nybegynder
29. februar 2004 - 10:01 #18
Hej Moms og terry

Nu har jeg fundet du af hvad jeg skal være når jeg bliver stor. Jeg har også fundet ud af hvad der var i vejen md min database.

Det var fordi alle variablene i tabellerne var aliesser! Altså hemmelige agenter, hvis (dæk)navne ikke kunne bruges til at sende SQL til. Desuden var de rigtige navne til dels på fransk! og dels fuld af mellemrum, som ikke bare lod sig fjerne - eller erstattet af "_", fodi så kune basen jo ikke tale sammen med alle sine tvillingebaser. Så jeg har sendt den tilbage til hvorden kom fra, og anbefalet at hele gennerationen får tandbehandling - og fyldt hullerne ud.

Jeg har ikke ville dele basen - da det som sagt ikke er min, og desuden er den fuld af franske ...

Derfor lukker jeg nu her - jeg deler point i porten - håber det er i orden - og tak for jeres tålmodighed.
Avatar billede terry Ekspert
29. februar 2004 - 10:19 #19
: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