10. oktober 2003 - 16:29Der 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.
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.
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
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)
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.
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 ''
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
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"
"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.
jeg trore jeg vil læse alt det her et par gange og arbejde mere med det og vende tilbage :)
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.