Avatar billede sajbar Nybegynder
25. februar 2003 - 22:18 Der er 47 kommentarer og
1 løsning

Hente data over i Excel via ODBC

Hejsa...
har siddet og kigget div. spørgsmål igennem..men kan ikke rigtig finde ud af det...håber der nogle der kan hjælpe mig.

Jeg skal have connectet til en MySQL database og jeg har installeret MyODBC driveren.
jeg kører office 2000..

Jeg skal have lavet sådan at når jeg åbner regnearket henter den nogle data fra en database over i regnearket..

der må da være et klogt hoved et eller andet sted der kan hjælpe mig..

Med Venlig Hilse
Daniel
Avatar billede somaliomar Praktikant
25. februar 2003 - 23:18 #1
Sæt DSN'en op hvis du ikke allerede har gjort det
- Start -> Settings -> Control Panel
- Administrative Tools -> Data Sources (ODBC)
- System DSN -> Add
- Vælg MySQL driver og klik på Finish
- Nu skal du konfigurere MySQL driveren.
- Windows DNS name = MyDNSConn
- MySQL Host = den computer som MySQL ligger på (lokalt = 127.0.0.1/localhost)

Nu kan du connecte til databasen med flg. kode

    Dim objConn As ADODB.Connection
    Dim objRs As ADODB.Recordset
    Dim strSQL As String
   
    Set objConn = New ADODB.Connection
    Set objRs = New ADODB.Recordset
   
    objConn.Open "MyDNSConn"
   
    strSQL = "SELECT * FROM Tabel"
    objRs.Open strSQL, objConn
   
    While Not objRs.EOF
        'Din kode...
    Wend
   
    objRs.Close
    objConn.Close
Avatar billede sajbar Nybegynder
25. februar 2003 - 23:23 #2
får en fejl ved Dim objConn As ADODB.Connection
"Compiler error: User-defined type not defined"
Avatar billede somaliomar Praktikant
25. februar 2003 - 23:25 #3
Start VBEditor -> Tools -> References...
Find og sæt flueben ved Microsoft ActiveX Data Object 2.x Library
Avatar billede sajbar Nybegynder
25. februar 2003 - 23:30 #4
"name conflict with existing module, project or project libary"
den fejl får jeg...ved ikke hvad der er galt..sikkert mig der er små kvadret så jeg smutter i seng og så må jeg kigge videre på det imorgen....

håber på at du kan hjælpe mig igennem senere når jeg er knap så smadret i bøtten;)
Avatar billede somaliomar Praktikant
25. februar 2003 - 23:32 #5
Det kan jeg da :)
Avatar billede sajbar Nybegynder
26. februar 2003 - 19:11 #6
så er jeg tilbage på min pind..men jeg får stadigvæk ovenstående fejl når jeg prøver at tilføje alle de der ting...
Avatar billede somaliomar Praktikant
26. februar 2003 - 19:13 #7
Du har to objekter med samme navn. Prøv at omdøbe dem.
Avatar billede sajbar Nybegynder
26. februar 2003 - 19:14 #8
den smider fint 2.2 - 2.3 - 2.4 ind men 2.1 - 2.5 - 2.6 - 2.7 vil den ikke installere uden fejlen "name conflict with existing module, project or project libary"
Avatar billede sajbar Nybegynder
26. februar 2003 - 19:14 #9
ehm hvordan, har lige installeret office og startet excel..
Avatar billede somaliomar Praktikant
26. februar 2003 - 19:16 #10
Vælger du flere af de samme referencer?
Avatar billede somaliomar Praktikant
26. februar 2003 - 19:17 #11
Hvis det virker med 2.4 så vælg den...
Avatar billede sajbar Nybegynder
26. februar 2003 - 19:33 #12
jeg vælger alle Microsoft ActiveX Data Object 2.* Library...
Avatar billede sajbar Nybegynder
26. februar 2003 - 19:36 #13
jeg får en runtime error nu når jeg prøver at køre ovenstående..
Avatar billede somaliomar Praktikant
26. februar 2003 - 20:39 #14
Du skal kun sætte flueben ved én af referecerne. Da jeg skrev 2.x mente jeg den seneste version af ActiveX Data Object. :)

Hvor i koden får du fejlen? Og hvad siger fejl-meddelelsen?
Avatar billede sajbar Nybegynder
26. februar 2003 - 20:42 #15
Automation error
Uspecifiseret fejl
og hvor den kommer kan jeg ikke lige se...
Avatar billede somaliomar Praktikant
26. februar 2003 - 20:43 #16
Hvordan ser din kode ud?
Avatar billede sajbar Nybegynder
26. februar 2003 - 20:44 #17
Private Sub Workbook_Open()
    Dim objConn As ADODB.Connection
    Dim objRs As ADODB.Recordset
    Dim strSQL As String
   
    Set objConn = New ADODB.Connection
    Set objRs = New ADODB.Recordset
   
    objConn.Open "MyDNSConn"
   
    strSQL = "SELECT * FROM Tabel"
    objRs.Open strSQL, objConn
   
    While Not objRs.EOF
        'Din kode...
    Wend
   
    objRs.Close
    objConn.Close
End Sub
Avatar billede somaliomar Praktikant
26. februar 2003 - 20:48 #18
Jeg kan ikke lige se hvad der er galt i ovenstående kode. Kan du finde ud af hvor fejlen opstår ved at debugge din kode?
Avatar billede sajbar Nybegynder
26. februar 2003 - 20:49 #19
hvordan tænker du på..?
jeg kender ikke ret meget til VBA...
Avatar billede somaliomar Praktikant
26. februar 2003 - 20:50 #20
Hovsa... Har du en tabel med navnet Tabel i din database?

  strSQL = "SELECT * FROM Tabel"
                            ^
Avatar billede sajbar Nybegynder
26. februar 2003 - 20:52 #21
så den også selv, har ændre til den rigtige tabel, men stadigvæk fejl.
Avatar billede somaliomar Praktikant
26. februar 2003 - 20:54 #22
Prøv med

...
    While Not objRs.EOF
        Debug.Print objRs(0)
        objRs.MoveNext
    Wend
...
Avatar billede sajbar Nybegynder
26. februar 2003 - 20:57 #23
får stadigvæk en fejl..den når åbenbart ikke så langt ned...
Avatar billede somaliomar Praktikant
26. februar 2003 - 20:59 #24
Hmm...
Avatar billede somaliomar Praktikant
26. februar 2003 - 20:59 #25
Prøv at lege lidt med det selv...
Avatar billede sajbar Nybegynder
26. februar 2003 - 21:01 #26
ehm..hvordan ?
som sagt helt på blank bund med VBA
Avatar billede sajbar Nybegynder
26. februar 2003 - 21:21 #27
*slå sig selv* jeg havde glemt at ændre dns tingen så den passede..
Avatar billede somaliomar Praktikant
26. februar 2003 - 21:22 #28
OK... Virker det nu?
Avatar billede sajbar Nybegynder
26. februar 2003 - 21:23 #29
så skal jeg bare have fundet ud af hvordan jeg får smidt resultatet ud i celler
Avatar billede sajbar Nybegynder
26. februar 2003 - 21:23 #30
ja det virker :)
Avatar billede sajbar Nybegynder
02. marts 2003 - 21:13 #31
smider du et svar så du kan få point...forresten du skulle ikke vide hvordan man gemmer i databasen via ODBC ?

har fået hentning til at virke :)
Avatar billede somaliomar Praktikant
03. marts 2003 - 07:50 #32
Her har du mit svar :)

Hvad tænker du på når du skriver gemme databasen via ODBC?
Avatar billede sajbar Nybegynder
03. marts 2003 - 08:15 #33
indsættelse i en tabel fra nogle angivede celler

f.eks. a1 - a4
Avatar billede somaliomar Praktikant
03. marts 2003 - 08:17 #34
Jeg er ikke med. Kan du ikke skære det ud i pap :)
Avatar billede sajbar Nybegynder
03. marts 2003 - 08:38 #35
jo når jeg kommer tilbage på min pind i eftermiddag :)
Avatar billede somaliomar Praktikant
03. marts 2003 - 09:03 #36
OK :D
Avatar billede sajbar Nybegynder
04. marts 2003 - 20:10 #37
okay, lettere forsinket er jeg tilbage:)

det jeg mener er at hvordan indsætter man indholdet fra nogle celler excell i en tabel i databasen.

et eksempel kan være at jeg ønsker at indsætte indholdet af A1 i en tabel

ved ikke om du kan følge mig ?
Avatar billede somaliomar Praktikant
04. marts 2003 - 20:19 #38
Den nemmeste måde, at gemme indholdet af cellen A1 i en tabel, er ved at bruge INSERT ( http://www.w3schools.com/sql/sql_insert.asp )

    strSQL = "INSERT INTO Tabel (Felt1) VALUES ('" & Range("A1") & "')"
    objRs.Open strSQL, objConn
Avatar billede sajbar Nybegynder
04. marts 2003 - 20:22 #39
kender godt til insert, skulle bare lige vide hvordan jeg fik fat i det enkelte felt:)
jeg prøver lige og så vender jeg tilbage, sig endlig til hvis du vil have flere point for din store hjælp.
Avatar billede somaliomar Praktikant
04. marts 2003 - 20:24 #40
Nej tak, jeg skal ikke have flere point. Du kan gemme pointene til en anden gang :)
Avatar billede sajbar Nybegynder
04. marts 2003 - 20:35 #41
mange tak, hmm okay jeg troede jeg havde fået bikset noget sammen som virkede med select, det har jeg så lige fundet ud af at det gør det ikke ordentligt...
den hiver kun første række i tabellen...

min funktion ser sådan ud:

Private Sub Workbook_Open()
    Dim objConn As ADODB.Connection
    Dim objRs As ADODB.Recordset
    Dim strSQL As String
    Set objConn = New ADODB.Connection
    Set objRs = New ADODB.Recordset
    Dim Ws As Object
    Dim i As Integer
    Set Ws = Sheets("Ark1")
    objConn.Open "Mysql"
    'slet nuværende indhold
    Ws.Activate
    Range("A1").Activate
    Selection.CurrentRegion.Select
    Selection.ClearContents
    Range("A1").Select
   
   
    strSQL = "SELECT * FROM test"
    objRs.Open strSQL, objConn
    For i = 0 To objRs.Fields.Count - 1
      Ws.Cells(1, i + 1).Value = objRs.Fields(i).Name
    Next i
   
    'Ws.Range(Ws.Cells(1, 1), Ws.Cells(1, objRs.Fields.Count)).Font.Bold = True
    'Ws.Range("A2").CopyFromRecordset objRs
    'Formater resultat
    'Sheets("Ark1").Select
    'Range("A1").Select
    'Selection.CurrentRegion.Select
    'Selection.Columns.AutoFit
    'Range("A1").Select

       
    objRs.Close
    objConn.Close
End Sub
Avatar billede sajbar Nybegynder
04. marts 2003 - 20:39 #42
eller hmm..har fundet ud af den del nu, hvordan slipper jeg af med at den udskriver titlen på cellen?
Avatar billede somaliomar Praktikant
04. marts 2003 - 20:40 #43
Prøv at udskifte denne blok kode

    For i = 0 To objRs.Fields.Count - 1
      Ws.Cells(1, i + 1).Value = objRs.Fields(i).Name
    Next i
   
med

    While Not objRs.EOF
        Ws.Cells(1, i + 1) = objRs(0)
        objRs.MoveNext
    Wend
Avatar billede sajbar Nybegynder
04. marts 2003 - 20:41 #44
hmm er fikset hjalp at sætte den til at starte ved 1 istedet for 0.

sikker på at du ikke vil have nogle point ?
Avatar billede sajbar Nybegynder
04. marts 2003 - 20:43 #45
den der bliver bare ved med at overskrive indholdet i cellen...den hopper ikke videre...
Avatar billede somaliomar Praktikant
04. marts 2003 - 20:44 #46
Der er en bug i koden :)

    While Not objRs.EOF
        Ws.Cells(1, i + 1) = objRs(0)
        i = i + 1
        objRs.MoveNext
    Wend

Og nej tak. Gem pointene til en anden gang.
Avatar billede sajbar Nybegynder
04. marts 2003 - 20:48 #47
jamen så siger jeg mange tak, det virker som det skal nu :)
Avatar billede somaliomar Praktikant
04. marts 2003 - 20:50 #48
:)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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