Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1100to1104
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

vbs für MySQL to xls

vbs für MySQL to xls
Julia
Hallo Leute,
ich hoffe ich bin mit dieser Thematik nicht falsch hier.
Ich habe ein Skript welches mir eine SQL-Abfrage auf unserer MySQL Datenbank macht und das Ergebnis in eine xls einfügt.
Leider kann sich mein Skript seit neustem nicht mehr mit der DB verbinden. DB ist umgezogen. Gebe ich die Parameter aus dem Skript in einen MySQL Browswer ein (IP, Server, Passwort und USer) klappt die Verbindung einwandfrei. Jemand eine Idee?:
Option Explicit
'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
' Const adOpenKeyset = 1
' Const adOpenDynamic = 2
' Const adOpenStatic = 3
'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
' Const adLockPessimistic = 2
' Const adLockOptimistic = 3
' Const adLockBatchOptimistic = 4
'---- CursorLocationEnum Values ----
' Const adUseServer = 2
Const adUseClient = 3
'---- ConnectModeEnum Values ----
' Const adModeUnknown = 0
Const adModeRead = 1
' Const adModeWrite = 2
' Const adModeReadWrite = 3
' Const adModeShareDenyRead = 4
' Const adModeShareDenyWrite = 8
' Const adModeShareExclusive = &Hc
' Const adModeShareDenyNone = &H10
' Const adModeRecursive = &H400000
Dim objExcel, objWb, SkriptPfad
Dim objSheet
Dim Conn, RS
Dim rowCount, i, headerSet
Dim x 'Zähler für Statusbar
MsgBox "Mit dem OK-Button wird der Import aus der DB gestartet."& vbCrLf & "Je nach SQL-Statement kann der Import mehrere Minuten dauern!" & vbCrLf & "Schließen Sie offene xls-Dokumente und vermeiden die Arbeit mit Excel während des Imports."& vbCrLf & "Sie werden über den Abschluss des Imports informiert!",64, "Info"
x = 0 'Anfangswert für Zähler - Anzahl importierter Datensätze
rowCount = 1
SkriptPfad = WScript.ScriptFullName 'Pfadermittlung
SkriptPfad = Left(SkriptPfad, Len(SkriptPfad) - Len(WScript.ScriptName)) 'Pfadermittlung
Set objExcel = CreateObject("Excel.Application")
Set objWb = objExcel.Workbooks.Open(SkriptPfad & "../Report.xls")'öffnet die angegebene xls
objExcel.Visible = False 'die geöffnete xls ist während dem Import nicht sichtbar
objExcel.Sheets("Datenbasis").Select 'wählt die angegebene Mappe der zuvor geöffneten xls
objExcel.Range("Datenbasis!$1:$65536").ClearContents 'löscht alle Inhalte von angegebener Mappe
'Angabe des Tabellenblattes
Set objSheet = objExcel.ActiveWorkbook.WorkSheets("Datenbasis") 'Import in angegebenes Tabellenblatt
Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "MSDASQL"
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"DATABASE=db_Kunde;" & _
"SERVER=10.111.12.173;", _
"read_user", "passwort"
Set RS = CreateObject("ADODB.Recordset")
RS.CursorLocation = adUseClient
'verwendete SQL-Anweisung
RS.Source = "Select * from Kunde;"
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open
Do While Not RS.EOF
'objExcel.StatusBar = x & " Datensätze aus JIRA importiert" 'Text für Statusbar 'macht nur Sinn bei objExcel.Visible = True
'Die Spalenüberschriften einfügen Bezug aus dem SQL-Statement
If( headerSet = 0 ) Then
For i = 0 to RS.Fields.Count - 1
objSheet.Cells(rowCount, i+1).Value = RS.Fields.Item(i).Name
Next
headerSet = 1
End If
'Die dazugehörigen Werte einfügen
For i = 0 to RS.Fields.Count -1
objSheet.Cells(rowCount+1, i+1).Value = RS.Fields.Item(i).Value
Next
rowCount = rowCount + 1
RS.MoveNext
x = x + 1
Loop
'objExcel.Statusbar = False 'Statusbar bereinigen 'macht nur Sinn bei objExcel.Visible = True
objExcel.Sheets("Fälligkeit").Select 'wählt die angegebene Mappe der zuvor geöffneten xls
objExcel.Cells(7, 5) = Date & " / " & Time & " Uhr" 'schreibt das Datum und die Zei des letzten Imports in das Sheet ICeD-Fälligkeitsliste in definierte Zelle
objExcel.Cells(8, 5) = x & " Datensätze" 'schreibt die Anzahl der importierten Datensätz in definierte Zelle von Sheet
RS.Close
Set RS = Nothing
Conn.Close
Set Conn = Nothing
MsgBox "Datenimport aus DB abgeschlossen! Die Datenbasis zeigt den Stand vom " & Date & " bis " & Time & "!" & vbCrLf & "Aktualisieren Sie die den Report über die Schaltfläche >>alle Pivots aktualisieren objExcel.Visible = True 'macht die zuvor geöffnete Datei nach Import sichtbar

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: vbs für MySQL to xls
10.09.2009 10:45:46
Julia
Gebe ich die Parameter in einen MySQL Browser ein dann klappt die Verbindung
Die Zugangsdaten stimmten also.
Nur der Port fehlt im meinem Skript im Vergleich zum MySQL Browswr.
Der Port ist 3304. Wo trage ich diesen in meinem Skript ein?
gebe ich folgendes ein:
"SERVER=10.111.12.173:3304;", _
klappt die Verbindung auch nicht..
AW: vbs für MySQL to xls
10.09.2009 11:15:21
Luschi
Hallo Julia,
der Port vomn MySQL ist Standardmäßig '3306'. Da bei eich dieser port abweicht, sollte es so
mit Vba - ADODB klappen:
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"DATABASE=db_Kunde;" & _
"SERVER=10.111.12.173;" _
"Port=3304;" & _
"User=read_user;" & _
"Password=passwort;" & _
"Option=16387"
Weitere Hinweise siehe hier:
http://books.google.de/books?id=iUZ_NTyL49AC&pg=PA765&lpg=PA765&dq=adodb+provider+mysql+ip+port&source=bl&ots=IkdFOXqk-n&sig=R2aXcp3un2Zn1K--0FtLWSV3Eog&hl=de&ei=m7-oSomCGcfn-Qb2oZ3ZBg&sa=X&oi=book_result&ct=result&resnum=1#v=onepage&q=&f=false
Gruß von Luschi
aus klein-Paris
PS: Was die Komatas bei Dir bewirken sollen, ist mir nicht erklärlich.
Anzeige
AW: vbs für MySQL to xls
10.09.2009 11:30:05
Julia
Hi Luschi,
habe es jetzt so eingefügt:
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"DATABASE=iKundenDB;" & _
"SERVER=10.111.192.173;" & _
"Port=3304;" & _
"User=read_user;" & _
"Password=password;" & _
"Option=16387"
Set RS = CreateObject("ADODB.Recordset")
RS.CursorLocation = adUseClient
'verwendete SQL-Anweisung
RS.Source = "SELECT * From KundenDB;"
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open
Geht trotzdem nicht, wo ist mein Fehler :( Bin kurz vorm ausflippen :)
Anzeige
AW: vbs für MySQL to xls
10.09.2009 11:38:38
Luschi
Hallo Julia,
ist iKundenDB eine Variable, die den Datenbanknamen enthält, dann so:
"DATABASE=" & iKundenDB & ";" & _
Dasselbe währe dann bei read-User und password, sollten das ebenfals Variablen sein.
Gruß von Luschi
aus klein-Paris
Dankee ;)
10.09.2009 11:39:26
Julia
Habs gelöst
Dein Link war goldwert! :)
AW: Dankee ;)
10.09.2009 11:42:10
Luschi
Hallo Julia,
verrätst Du mir auch die Lösung, ich bin nun mal immer so neugierig und mach auf der Strecke viel mit Vba.
Gruß von Luschi
aus klein-Paris
so gehts :)
10.09.2009 11:50:50
Julia
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"SERVER=10.111.92.173;UID=read_user;PWD=qwertz;Port=3304;database=db_Kunde"
Dieses "Option=16387" habe ich weggelassen, brauche ich das unbedingt?
Anzeige
AW: so gehts :)
10.09.2009 12:15:30
Luschi
Hallo Julia,
ob Du den Option-Parameter brauchst, häng davon ab, welche speziellen (MySQL-spezifischen) Datentypen in den Tabellen vorhanden sind. Manche müssen (z.B. BigInt in Int) beim Auslesen per ADODB umgewandelt werden.
Noch ein Tipp:
Für das Schreiben der Werte aus dem ADODB-Recordset in die Excel-Tabelle gibt es seit ExcelXP die Methode 'CopyFromRecordset' (siehe Vba-Hilfe).
Das Schreiben der Feldnamen als Spaltenüberschrift bleibt weiterhin so wie in Deinem 1. geposteten Code.
Gruß von Luschi
aus klein-Paris

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige