Avatar billede rar_jacobsen Nybegynder
10. april 2004 - 18:19 Der er 18 kommentarer og
1 løsning

Import af data fra Excel til Access online

Hej

Er det muligt at lave et script hvor du, ud fra foruddefineret regler om hvordan export filen skal være bygget op, kan importere data direkte til en access-database uden at skulle indtaste hver enkelt post ?!?

Kan det lade sig gøre ... håber I kloge hoveder kan hjælpe mig med det?
Avatar billede rar_jacobsen Nybegynder
10. april 2004 - 18:21 #1
Mangler lige en lille detalje ... det er ikke 100% nødvendigt at det skal være en Excel fil, kunne også være en ganske almindelig kommaseperaret tekstfil
Avatar billede thesurfer Nybegynder
10. april 2004 - 18:25 #2
Nu kender jeg ikke hvordan en Excel fil er bygget op, men du kan godt gøre det med en kommaseperaret tekstfil :-)
Avatar billede thesurfer Nybegynder
10. april 2004 - 18:29 #3
.. du bruger bare nogle funktioner til manipulation af strenge:
http://www.w3schools.com/vbscript/vbscript_ref_functions.asp#string

Og lidt ASP+Access kode:
Lektionerne 17-22 på http://html.dk/tutorials/asp/
Avatar billede keysersoze Ekspert
10. april 2004 - 18:33 #4
du kan arbejde med excel på næsten samme måde som med access på nettet, men jeg har aldrig selv prøvet det

Hvis det er en kommasepareret txt-fil kan du let gøre det vha FSO (FileScriptingObject)
Avatar billede thesurfer Nybegynder
10. april 2004 - 18:36 #5
Avatar billede montago Praktikant
13. april 2004 - 15:59 #6
hvis du bruger en kommaseperaret fil er det jo ingen sag at skulle importere filen, og bygge din SQL op efter den,...
Avatar billede keysersoze Ekspert
13. april 2004 - 16:29 #7
montego >> 10/04-2004 18:33:23?
Avatar billede thesurfer Nybegynder
13. april 2004 - 16:42 #8
og: 10/04-2004 18:25:02 + 10/04-2004 18:29:13 :-)
Avatar billede thesurfer Nybegynder
13. april 2004 - 16:43 #9
Og det ville være en god ide, at bruger arrays: http://html.dk/tutorials/asp/lektion8.asp
Avatar billede keysersoze Ekspert
13. april 2004 - 16:49 #10
nok måske lige en idé at undlade arrays og alt muligt andet før filen (excel eller txt) i det hele taget er læst ind :)

og feedback ville måske være at foretrække som det aller aller første ;)
Avatar billede thesurfer Nybegynder
13. april 2004 - 17:58 #11
"at undlade arrays og alt..." - synes du? ;-)
Det ville jo være meget nemt med array.. så behøver man ikke en masse Left, Mid, Right, InStr funktioner..

Men man skal muligvis bruge dem alligevel..
Avatar billede keysersoze Ekspert
13. april 2004 - 18:12 #12
jeg er helt enig med dig i at der skal arbejdes med arrays såfremt det er en komma (eller noget andet) sepereret fil... men så længe vi ikke ved det er det svært (=umuligt) at rådgive om hvordan der skal arbejdes med dataene.
Avatar billede thesurfer Nybegynder
13. april 2004 - 18:30 #13
keysersoze> Fuldstændigt korrekt :-)

Spørgeren har dog skrevet:
"Mangler lige en lille detalje ... det er ikke 100% nødvendigt at det skal være en Excel fil, kunne også være en ganske almindelig kommaseperaret tekstfil"

Excel kan eksportere ti CSV-filer.. så er det optimalt at gøre det, hvis han kan nøjes med arrays :-)

Han nævner også "foruddefineret regler"..

Men som du skrev.. noget feedback ville være nice.. :-)
..han får et chok, når han ser 13 mails i sin mailbox.. ;-)
Avatar billede rar_jacobsen Nybegynder
15. april 2004 - 11:13 #14
Chokket har lagt sig ... og har selv gået og tænkt lidt over det, det bliver en kommaseperaret fil. Grunden til jeg skrev Excel er fordi jeg er erhvervsskadet. Mit daglige arbejde består af at lave rapporter og statistikker i Excel :)

Jeg skal ærligt indrømme at jeg ikke er så stærk i asp programmering mere som jeg har været da mit job og familie har taget det meste af min tid de sidste mange måneder (par år).

Så lidt kildekode ville være en sindsyg stor hjælp, har aldrig arbejdet med Array, men det jeg kender til det så ville det helt klart være en fordel det kan jeg godt se
Avatar billede thesurfer Nybegynder
15. april 2004 - 13:35 #15
Du burde kunne lave scriptet, ud fra de links jeg har skrevet.
Men hvis du smider et eksempel, på din CSV (Comma Separeted Values / kommaseparerede værider) fil, kan vi nemmere lave koden til dig..

Jeg vil dog prøve at lave et eksempel, i løbet af dagen.
Avatar billede thesurfer Nybegynder
15. april 2004 - 14:31 #16
Eksemplet består af:
* tilfoj.asp - scriptet der læser værdierne fra filen "test.csv", og tilføjer dem til databasen ("db1.mdb")
* se.asp - scriptet henter alle værdierne fra databasen, og udskriver dem til skærmen
* test.csv - filen med værdierne.. struktur: "navn","hjemmeside","email adresse"
* db1.mdb - selve databasen


***** databasen:

* filnavn: "db1.mdb"
* placering: i samme mappe som asp filerne
* tabel - navn: "tblInfo"
* felt - navn: "navn", type: "tekst"
* felt - navn: "hjemmeside", type: "tekst"
* felt - navn: "email", type: "tekst"



***** tilfoj.asp:

<%
option explicit ' man undgår stavefejl, da *alle* variabler skal defines, med: dim variabelnavn

''' definer variablerne:
dim fs, f
dim tmp, arr, i
dim strNavn, strHjemmeside, strEmail
dim Conn, DSN, strSQL

' Her oprettet FSO objektet:
Set fs=Server.CreateObject("Scripting.FileSystemObject")

' Her åbnes vores CSV fil:
Set f=fs.OpenTextFile(Server.MapPath("test.csv"), 1)

tmp = ""
do while f.AtEndOfStream = false ' så længe at vi ikke er nået slutningen filen, udføres:
tmp = tmp & f.ReadLine & ";" ' tilføj linie fra filen, til variablen "tmp", og tilføj ";"
loop ' loop, dvs gentag

f.Close ' luk filen igen

' frigør objekterne (spar på ressourcerne)
Set f=Nothing
Set fs=Nothing


''''' Databasen

' Opret forbindelsen til database:
Set Conn = Server.CreateObject("ADODB.Connection")

' Vælg database-driveren:
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "

' Vælg database-fil:
DSN = DSN & "DBQ=" & Server.MapPath("db1.mdb")

' Åben forbindelsen med vores data:
Conn.Open DSN

arr = split(tmp, ";") ' Vi bruger "Split" til at splitte "tmp" op, ved ";" tegnet:
for i = lbound(arr) to ubound(arr) - 1 ' denne loop starter ved arrays første værdi (LBound) og slutter ved sidste værdie (UBound), minus 1 (da den starter ved 0, og ikke 1)

    tmp = arr(i) ' smid værdien "Hans Hansen,http://www.hansen.dk,hans@hansen.dk" (osv..) over i tmp

    strNavn = left(tmp, InStr(tmp, ",") - 1) ' indholdet af strNavn: fra venstre og til positionen af ",", minus 1 tegn
    tmp = mid(tmp, len(strNavn)+2) ' indholdet af tmp: fra længden af indholdet af strNavn, plus 2 tegn, og resten af linien

    strHjemmeside = left(tmp, InStr(tmp, ",") - 1) ' indholdet af strHjemmeside: fra venstre og til positionen af ",", minus 1 tegn
    tmp = mid(tmp, len(strHjemmeside) + 2)' indholdet af tmp: fra længden af indholdet af strHjemmeside, plus 2 tegn, og resten af linien

    strEmail = tmp ' den sidste værdi er bare resten af linien

    ' Vi tester værdier.. hvis du ikke har databasen endnu:
    response.write "Navn: " & strNavn & "<br>Hjemmeside: " & strHjemmeside & "<br>Email: " & strEmail & "<br><br>"

    ' Gem i databasen (vores "indsættelelses"-kommando):
    strSQL = "Insert into tblInfo ("

    strSQL = strSQL & "navn, "
    strSQL = strSQL & "hjemmeside, "
    strSQL = strSQL & "email) "

    strSQL = strSQL & "values( "

    strSQL = strSQL & "'" & strNavn & "', "
    strSQL = strSQL & "'" & strHjemmeside & "', "
    strSQL = strSQL & "'" & strEmail & "')"
   
    Conn.Execute(strSQL) ' udfør vores "indsættelses"-kommando
next

' Luk forbindelsen til database, og frigør:
Conn.Close
Set Conn = Nothing

response.write "<br><br><br>Alle værdierne er tilføjet"
end if
%>



***** se.asp:

<%
option explicit

dim Conn, DSN, rs, strSQL

' Opret forbindelsen til database:
Set Conn = Server.CreateObject("ADODB.Connection")

' Vælg database-driveren:
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "

' Vælg database-fil:
DSN = DSN & "DBQ=" & Server.MapPath("db1.mdb")

' Åben forbindelsen med vores data:
Conn.Open DSN

strSQL = "Select * from tblInfo order by navn"

' Smid database poasterne over i "rs":
Set rs = Conn.Execute(strSQL)

if not(rs.bof or rs.eof) then ' hvis vi hverken er ved start eller ved slutningen, er der mindst 1 post -> udfør:

' Gennemløb Recordset (rs) med en løkke
Do while not rs.eof

  ' Udskriv værdien af kolonnen Fornavn og fødselsdato
  response.write "Navn: " & rs("navn") & "<br>Hjemmeside: " & rs("hjemmeside") & "<br>Email: " & rs("email") & "<br><br>"

  ' Gå til næste Record i rs
  rs.MoveNext

' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
Loop
end if

' Luk forbindelsen til database, og frigør:
Conn.Close
Set Conn = Nothing

%>



***** test.csv (struktur: "navn","hjemmeside","email adresse"):

Hans Hansen,http://www.hansen.dk,hans@hansen.dk
Jens Jensen,http://www.jensen.dk,jens@jensen.dk

---

Hvis du har spørgsmål, er du meget velkommen til at stille dem.
Avatar billede rar_jacobsen Nybegynder
21. april 2004 - 12:52 #17
Jeg kigger på det lige så snart jeg kan få min latterlige computer til at virke med IIS igen
Avatar billede rar_jacobsen Nybegynder
07. september 2004 - 10:45 #18
lukker
Avatar billede thesurfer Nybegynder
07. september 2004 - 12:04 #19
eh? Hvad sker der?
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
Kurser inden for grundlæggende programmering

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