Avatar billede mbpedersen Nybegynder
10. oktober 2003 - 16:29 Der er 35 kommentarer og
1 løsning

Import af kommasepareret tekstfil v.hj.a. ado eller odbc

Jeg vil gerne importere en kommasepareret tekstfil til en access 2000 tabel. Da importen skal ske automatisk, er manuel import ikke aktuel i dette tilfælde! Filen indeholder X antal rækker (max. vil ligge omkr. 100) og 4 kolonner eller felter. Værdierne er adskilt med et komma. Jeg vil gerne have læst filen ind i en tabel: tblDatafile, hvor der er 5 felter. Det femte felt tildeles en værdi fra en variabel, som er "fast" for hver fil, men ændrer værdi fra fil til fil.

Jeg behøver en "opskrift" på hvordan dette gøres, fra sub til end sub eller function til end function.
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:39 #1
DoCmd.TransferText A_IMPORTDELIM, "navn på din gemte import spec", "tabel navn",  "fil navn", False

er såmænd alt hvad der skal til !

(du skal selvfølgelig have oprettet en navngiven import spec først)
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:45 #2
Jeg mener ikke at import spec tillader at putte en konstant ind,
men så læser du ind i en temporær tabel og:

DoCmd.RunSQL "SELECT INTO permtabel SELECT felt1,felt2,123 FROM temptabel;"
Avatar billede terry Ekspert
11. oktober 2003 - 09:54 #3
mbpedersen>IF you commented Arne's solutions then he and we others would maybe have some ideas on how we could help.
Avatar billede mbpedersen Nybegynder
11. oktober 2003 - 13:25 #4
Hej Arne V
Jeg er blevet bedt om, at kommentere min afvisning af dit svar. Den variabel, som jeg har fat i er: filnavnet. Den henter jeg via ADO og stempler ned i hovedtabellen: tblFileName. Her er filnavnet primærnøgle. I samme kørsel vil jeg gerne have importeret min tekstfil og stemplet variablen ned i tblDataFile, hvor den så er fremmednøgle. Jeg har arbejdet med den løsning, som du også har foreslået, men den vil, som du selv er inde på, give mig temporære tabeller, + opdaterings- og sletteforespørgsler. Det var derfor mit håb, at jeg kunne gøre arbejdet på en mere smidig måde, enten via ADO eller evt. v.hj.a. Microsoft text driver (ODBC), som det også fremgår af overskriften. Derfor besluttede jeg mig for at se, om der var nogen her på Eksperten, der kunne hjælpe mig med en ko-destump, der fra ende til anden, kunne klare dette job.
Avatar billede arne_v Ekspert
11. oktober 2003 - 14:50 #5
Det kunne du jo bar ehav efortalt, så havde vi ikke behøvet spille
tid på det som du allerede vidste.

Her er et eksempel:

Sub loadfile(filnam As String, tblnam As String, value As Integer)
    Dim line As String
    Dim fields
    Dim sql As String
    Open filnam For Input As #1
    Do While Not EOF(1)
        Line Input #1, line
        fields = Split(line, ",")
        sql = "INSERT INTO " & tblnam & " VALUES (" & fields(0) & ",'" & fields(1) & "','" & fields(2) & "','" & fields(3) & "'," & Str(value) & ");"
        DoCmd.RunSQL sql
    Loop
    Close #1
End Sub

filnavn eer argument
tabelnavn er argument
ekstra værdi er argument

Jeg har forudsat at:
  1. felt er integer
  2.-4. felt er text
  5. felt (ekstra værdi) er integer

Men du kan nemt rette det til efter dit behov.
Avatar billede mbpedersen Nybegynder
12. oktober 2003 - 09:36 #6
Sådan skal det gøres! Tak for tålmodigheden og hjælpen.
Avatar billede yuksel Nybegynder
02. maj 2005 - 15:34 #7
jeg har lige et stpørgesmål til det her
Avatar billede terry Ekspert
02. maj 2005 - 15:37 #8
go ahead yuksel
Avatar billede yuksel Nybegynder
02. maj 2005 - 15:41 #9
jeg sidder med en kommasepfil og skal importere i en tabel, også tog jeg udgangspunkt i dette eks.


    Open filnavn For Input As #1
    Do While Not EOF(1)
        Line Input #1, line
        fields = Split(line, ",")
        strSQL = "INSERT INTO " & tabel & " VALUES (" & fields(n) & ",'" & fields(M) & ");"
        '','" & fields(2) & "','" & fields(3) & "'," & Str(value) & ");"
        DoCmd.RunSQL strSQL

    Loop
    Close #1
men den melder fejl i sql, og hvis der er nu er flere felter i min tabel som skal laves feks. har jeg 7 felter hvor 5 af dem skal være sættes i variabler og 2 skal
hentes for denne .dat fil (n og mm)

Bilnr
prnr
abnr
mm
n
to
t7
Avatar billede yuksel Nybegynder
02. maj 2005 - 15:45 #10
skulle jeg måske have en variabel :

" VALUES (" & fields(n) & ",'" & fields(M) & " &str(bilnr)));"
Avatar billede yuksel Nybegynder
02. maj 2005 - 15:49 #11
terry skal jeg ikke oprette som en spørgesmål istedet for ?
Avatar billede arne_v Ekspert
02. maj 2005 - 15:49 #12
du skal vel lave en INSERT med 5 normalt variable og 2 fields(rigtigtkolonnenr)
og huske '' eller ikke ''
Avatar billede terry Ekspert
02. maj 2005 - 15:50 #13
if you look at Arne's example he uses a number for the field index

fields(1)

When the coma seperated file is read each line gets put into an array (fields). So the first element in th earray will be Nilnr and then next prnr. So just use the array element number NOT the name of the field.
Avatar billede terry Ekspert
02. maj 2005 - 15:51 #14
02/05-2005 15:49:50 > If we can answer it here then no need
Avatar billede yuksel Nybegynder
02. maj 2005 - 15:54 #15
ok, jeg prøver lige
Avatar billede terry Ekspert
02. maj 2005 - 15:57 #16
Which fields are varaibles and whcih from the dat file? also which data types are they?
Avatar billede terry Ekspert
02. maj 2005 - 15:58 #17
You should able to take Arne's example and modify it.

If you use a variable then just put it in place of fields(X) and if its from the dat file then use fields(X) where X = column number-1 in Array
and if its a text field then you need to put it inside ''
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:01 #18
jeg får en fejl i min sætning

strSQL = "INSERT INTO " & tabel & " VALUES (" & fields(0) & ",'" & fields(1) & ");"
DoCmd.RunSQL strSQL
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:02 #19
jeg har lavet en tabel kun med 2 felter for at simplificere det så det virker
Avatar billede terry Ekspert
02. maj 2005 - 16:04 #20
strSQL = "INSERT INTO " & tabel & " VALUES (" & fields(0) & ",'" & fields(1) & "');"

make sure that text fields are inside ''
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:04 #21
det er sådan min her de serud:


Bilnr    tal (double)
prnr    tal (double)
abnr    tekst
mm      tal (double)    fra tekstfil
n        tal (double)    fra tekstfil
to      tal (double)
t7      tal (double)
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:05 #22
det er sådan tingene ser ud
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:08 #23
hmmm har fundet noget som jeg ikke har taget hojde for .
dette er en udpluk af tekstfilen, og det er lidt dumt at den første linier er tekstfelt og den skal den ikke importere



    ff,    N
0.0100,  0.60
0.0200,  2.70
0.0400,  5.00
0.0500,  7.30
0.0700,  9.40
0.0800, 11.40
0.0900, 13.30
0.1100, 15.50
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:09 #24
den melder subscript out of range
Avatar billede arne_v Ekspert
02. maj 2005 - 16:10 #25
bare læs en linie inden while løkken
Avatar billede arne_v Ekspert
02. maj 2005 - 16:10 #26
og hvis det er 2 tal felter så skal der ikke '' omkring det sidste
Avatar billede arne_v Ekspert
02. maj 2005 - 16:11 #27
og pas på tomme linier !
Avatar billede terry Ekspert
02. maj 2005 - 16:11 #28
strSQL = "INSERT INTO " & tabel & " VALUES (" & BilNr & "," & prnr & ", '" & abnr & "'," & fields(3) & "," & fields(4) & "," & [to] & "," & t7 & ")"

NOT tested
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:11 #29
også er der også punktum i den det acceptere access hellere ikke ! vel :(
Avatar billede terry Ekspert
02. maj 2005 - 16:14 #30
make sure youhave your regional settings on the PC set to English
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:17 #31
hvad betyder "sub script out of range"
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:18 #32
jammen alle de pcer som den skal kørere på er danske og har fået vide at de stadige skal være det.
og med min sql melder fejl "sub script out of range"
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:21 #33
og det med at læse den første line inden while løkken ?
Avatar billede mbpedersen Nybegynder
02. maj 2005 - 16:26 #34
"Subscript out of range" kan forekomme, hvis du har dimensioneret dit array til fx.: 2, men du refererer til fx.: 3. Fx.: Dim test(2) as Int, test(1) = 1 test(2) = 2 og test(3) = 3. test(3) findes ikke i dit array og så får du fejlen.
Avatar billede terry Ekspert
02. maj 2005 - 16:32 #35
If your numbers use . as the decimal seperator then you will also need to change it to , otherwise its not going to give you the correct value.
Avatar billede yuksel Nybegynder
02. maj 2005 - 16:55 #36
jeg trore jeg vil læse alt det her et par gange og arbejde mere med det og vende tilbage :)
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