Avatar billede Voyager57 Nybegynder
30. marts 2015 - 15:41 Der er 7 kommentarer og
1 løsning

Ønsker hjælp med VBA, Excel Access database, der skal laves om til MySQL

Nogle der kan gennemskues hvad der går galt her ?

'Genererer global værdi for varenummer
Global VareNr As String
Public Sub Hent_Vare_Valg()

    ' Deklarerer variabler

    Dim Sheetname, database_name, user_id, password As String
    Dim sqlstr, sqlstr1 As String ' SQL to perform various actions
    Dim Brugerdato, USDate, Username As String
    Dim rs As ADODB.Recordset
    Dim LastID As Integer
    Dim MySearch, ComboName As String
    Dim R As Integer
    Dim Cn As ADODB.Connection
   
    '----------------------------------------------------------------------
    ' Opretter forbindelse til database
    server_name = "database.dk"
    database_name = "database"
    user_id = "brugernavn"
    password = "kodeord"
   
    '-------------------------------------------------------------------------
   
   
    R = ActiveCell.Row
    ' Henter lokationen af databasen
    ' Bruger det aktuelle Ark til dataene
   
  Sheetname = ActiveSheet.Name
   
    'Spørger om varenummer
   
    If VareNr = "" Then Exit Sub ' Valg kommer fra Formularen "Findvalg"
   
    ' Åbner database
   
    Set Cn = New ADODB.Connection
   
    Cn.Open "DRIVER={MySQL ODBC 3.51 Driver}" _
    & ";SERVER=" & server_name & ";DATABASE=" & database_name _
    & ";UID=" & user_id & ";PWD=" & password

    Set rs = New ADODB.Recordset
   
    ' Søger i database, efter indtastede navn
   
    StrSQL = "SELECT * From Varenumre WHERE ((Varenumre.Nummer) = '" & VareNr & "');"
    rs.Open StrSQL, Cn, adOpenKeyset, adLockOptimistic, adCmdText
   
    'Bruger records fra Fakturaer tabel "FakturaValg" til at indsætte på Excelark

    rs.MoveFirst ' finder det første varenummer
   
        With rs
   
            Range("A" & R) = .Fields("Nummer")
            Range("B" & R) = .Fields("Varetekst")
            Range("I" & R) = .Fields("Varepris")
   
        End With
   
    'Afslutter og lukker pænt efter sig.
   
    rs.Close
    Set rs = Nothing
    Cn.Close
    Set Cn = Nothing
   
    On Error Resume Next
   
    ' Bliver på aktuelt ark

    Set CurrentChart = Sheets(Sheetname)
    Sheets(Sheetname).Select
   
    Range("A" & R + 1).Select
   


End Sub

Avatar billede vagnk Juniormester
30. marts 2015 - 18:16 #1
Kender du noget til ODBC?
Avatar billede vagnk Juniormester
30. marts 2015 - 18:25 #2
Nej, det var måske lidt flabet spurgt.

ODBC betyder Online DataBase Conectivity og er en teknik så man kan få forskellige databasesystemet (Access og MySQL) til at arbejde sammen på tværs af netværk.

Så vidt jeg husker fra den gang jeg arbejdede med det henter og installerer man en ODBC til Access og og beder den om at hente data fra den server du har MySql på.

Link http://en.wikipedia.org/wiki/Open_Database_Connectivity
Avatar billede Voyager57 Nybegynder
31. marts 2015 - 10:11 #3
Hej Vagnk.

Jada, kender lidt til det, men ikke meget til MySQL, ved at der er forskelle på Access og MySQL, derfor spørgsmålet i denne tråd.

Ovenstående programeksempel virker da også fint nok, men ville gerne have en bedre og mere korrekt måde at gøre tingene på i VBA Excel. (Måske endda PHP)
Avatar billede vagnk Juniormester
31. marts 2015 - 11:16 #4
Her kommer den!

Jeg går ud fra at du kører Windows og efterfølgende forklaring forholder sig til Win 8.1 Start med at finde ud af om din maskine er 32 eller 64 bit. Det er ikke helt enkelt på Windows fordi mange fabrikanter snyder og sætter 32 bit styresystem på en 64 bit maskine. Måske skal du downloade og installere 2 gange.

Gå ind på "http://dev.mysql.com/downloads/connector/odbc/" vælg 32- eller 64-bit og download. Du kan godt bruge msi-udgaven og installer driveren.

I Access går du i fanen "Eksterne data" og trykker på "Mere" i gruppen "Importer" og herunder "ODBC-database". På næste side vælger du mellem at importere data eller lave en kæde til data således at ændringer i Access gennemføres i MySqQL. Dette valg har ikke den store betydning.

Når du har valgt og trykker knappen "OK" kommer en side frem hvor du kan vælge datakilden. Tryk på fanebladet "Maskindata" og derefter på knappen "Ny". Når du har trykket på diverse knapper kommer du ind på en side, hvor du kan vælge datakilden. Din nyistallerede ODBC-driver ligger sandsynligvis nederst. Vælg den der hedder noget med "ANSI-Driver".

Efter at have trykket "Næste" trykker du "Udfør" - og så har du en forbindelse mellem din Access og den MySQL-server hvortil du vil have dine data overført.

Siden du derefter kommer ind på skulle vise dine MySQL tabeller, men dem har du jo ikke endnu.

Hvis du har haft problemer indtil nu er det sandsynligvis den forkerte driver og så må du forfra, men lige huske at afinstallere den ODBC du allerede har installeret. Det gør du fra Kontrolpanel.

Marker de tabeller du vil have overført og gå i "Mere" i gruppen "Eksporter" og vælg "ODBC-datakilde". Følg anvisningerne så du går gennem samme sider som du gjorde ovenfor. Du vælger den "Maskindatakilde du just har installeret og vupti ligger dine Access-tabeller på din MySQL-server!!!

Hvis du kommer nogenlunde helskindet gennem denne forklaring er det måske noget jeg skulle lægge i en guide, så fortæl om dine erfaringer og om min beskrivelse er forståelig.
Avatar billede vagnk Juniormester
31. marts 2015 - 11:23 #5
Lad mig tilføje at jeg, da jeg havde mindre SQL-uerfaring, havde stor gavn af at kunne lave nogle hurtige tabeller og views med Access' udmærkede brugerinteface.
Avatar billede Voyager57 Nybegynder
31. marts 2015 - 11:42 #6
Hej Vagnk.

Wow, det er da "nemt", fungerer fint på 3.51 ODBC :-)

Var da også lidt af en smart måde at gøre tingene på :-)

Tak!
Steen
Avatar billede vagnk Juniormester
04. april 2015 - 07:58 #7
Godt du kom igennem.
Jeg fornemmer at beskrivelsen var til at forstå, så jeg vil overveje når tiden bliver til det at lave en guide.
Vagn
Avatar billede Voyager57 Nybegynder
04. april 2015 - 11:46 #8
Tror det er en god idé Vagn.

Troede faktisk at det ville kunne bruges til en form for replikation af databasen, men det gør den ikke.

På den anden side ville det være for nemt :-)

100 Tak for hjælpen.
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

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