Avatar billede fogh Nybegynder
21. juni 2012 - 15:00 Der er 6 kommentarer

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?

pft
Thomas
Avatar billede supertekst Ekspert
21. juni 2012 - 18:17 #1
Er det sammenhængende områder i CSV-filen?

Hvilken feltseparator anvendes?

Evt.kunne man overføre de relevante overskrifter til en separat fil og anvende disse til udtræk - alt via VBA..
Avatar billede 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
Avatar billede 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
Avatar billede fogh Nybegynder
22. juni 2012 - 00:15 #4
Hej - brugerekspert - det lyder interessant!

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?
Avatar billede 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.
Avatar billede fogh Nybegynder
03. august 2012 - 22:50 #6
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.
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