Linke eller importere udvælge kollonner fra tekstfil
Hej Eksperter!
Jeg har en folder med en masse ensartede .csv filer hvor jeg hver måned skal importere data ind i Access. Der er 396 kollonner i .csv filerne. Hvilket betyder at jeg ikke umiddelbart kan importere den "pænt" til Access (max 255 col.).
Optimalt får jeg konstrueret noget VBA der kan importere UDVALGTE kollonner direkte fra de enkelte .csv filer til én samlet tabel i databasen.
Alternativt skal jeg have noget kode der kan oprette 30-60 sammenkædede tabeller til de filer og så køre en import fra dem enkeltvis. Udfordringen her er, at jeg kun kan importere fra filerne hvis jeg importerer hver linie son "Notat" for Access kan ikke håndtere mere end 255 kollonner. Men kan jeg blot få linierne ind i Access, så må jeg bryde data ud af notat feltet efterfølgende - men det virker som noget spildt arbejde.
Jeg har forsøgt at bruge denne kode: DoCmd.TransferText acLinkDelim, , "NEW_02012012", "C:\Data\data_02012012.csv"
Og den opretter en sammekædet tabel som jeg kan bruge - på nær at den slutter ved kollonne 255 så jeg mister data!
* Reelt skal jeg kun bruge de 112 af de 396 kollonner i filen. * Første linie i .csv filen skal jeg ikke bruge * Anden linie i .csv filen indeholder overskriften (ønsket feltnavn)
Nogle bud på hvordan jeg kan nøjes med at se på de kollonner fra .csv filerne som jeg er interesseret i?
Evt.kunne man overføre de relevante overskrifter til en separat fil og anvende disse til udtræk - alt via VBA..
Synes godt om
Slettet bruger
21. juni 2012 - 21:00#2
Sub importSpecielColumns() Dim fAr, sql With CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Data\data_02012012.csv", 1) .readLine '1 line While Not .AtEndOfStream fAr = Split(.readLine, ";") sql = "Insert into TabelName (f1,f2) values(" & _ fAr(1) & "," & _ fAr(2) & ")" CurrentDb.Execute sql Wend: End With End Sub
---- f1 og f2 skal erstattes af dine 112 feltnavne og indeksering i fAr af de aktuelle feltpositioner. Vær opmærsom på at tekstfelter i csv filen skal have 'tekstfelt omslutter' - gåseøjne eller apostrof og evt datoer skal 'amerikaniseres': "#" & Format(dat, "mm-dd-yyyy") & "#" Bemærk at andet argument til split er feltseperatoren. Prøv først udskrift til immediate vinduet: debug.print sql
Synes godt om
Slettet bruger
21. juni 2012 - 21:01#3
Sub importSpecielColumns() Dim fAr, sql With CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\Data\data_02012012.csv", 1) .readLine '1 line While Not .AtEndOfStream fAr = Split(.readLine, ";") sql = "Insert into TabelName (f1,f2) values(" & _ fAr(1) & "," & _ fAr(2) & ")" CurrentDb.Execute sql Wend: End With End Sub
---- f1 og f2 skal erstattes af dine 112 feltnavne og indeksering i fAr af de aktuelle feltpositioner. Vær opmærsom på at tekstfelter i kildefilen skal have 'tekstfelt omslutter' - gåseøjne eller apostrof og evt datoer skal 'amerikaniseres': "#" & Format(dat, "mm-dd-yyyy") & "#" Bemærk at andet argument til split er feltseperatoren. Prøv først udskrift til immediate vinduet: debug.print sql
Jeg har forsøgt mig men efter et par ganges simpel test får jeg denne fejl:
Run time error '62': Input past end of file.
og den stiller sig ved udtrykket: .readLine '1 line
Any clue?
Synes godt om
Slettet bruger
22. juni 2012 - 21:52#5
Det tyder nærmest på at den fil du læser fra, intet indhold har - er på 0 bytes eller måske at vbscript på dit system ikke er sat op til at tillade fil adgang. Prøv et eksempel der blot dumper linierne til immediate vinduet.
'input past end of file' betyder at der ikker er mere at læse - fordi man har læst 'filen op' gennem brug af så mange .Readline kald som filen har linier - filpointeren har nået slut på filen.
Den indledende .ReadLine er et eksempel på at skippe første linie - f.eks fordi den indeholder feltnavne som ikke skal bruges.
Undskyld det sene svar - der har været andre ting i vejen - og så lige en sommerferie ;O) Der er indhold i filen og jeg kan godt foretage import. Jeg prøver lige at lege med din kommentar omkring den ekstralinie til feltnavnene måske det er den der driller.
Synes godt om
Ny brugerNybegynder
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.