Connection to DB failed - vbs Skript (MySQL DB)
Hallo ich habe ein Skript (vbs) welches mir aus einer MySQL Datenbank meine Abfrage in ein xls kopiert.
Wenn sich das Skript versucht mit der MySQL-DB zu verbinden kommt folgende Fehlermeldung:
Can`t connect ti MySql server on '10.1.111.19' (10061)
Code: 80004005
Quelle: Microsoft Ole DB Provider for ODBC Drivers
Hier die Codestelle (Auszug):
Trage ich die Daten händsich über den "MySQL Query Browser" ein dann klappt die Verbindung.
Database = Standardschema, sonst die Angaben aus dem Quellcode
Jemand eine Idee?
Wenn sich das Skript versucht mit der MySQL-DB zu verbinden kommt folgende Fehlermeldung:
Can`t connect ti MySql server on '10.1.111.19' (10061)
Code: 80004005
Quelle: Microsoft Ole DB Provider for ODBC Drivers
Hier die Codestelle (Auszug):
Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "MSDASQL"
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"DATABASE=KundenDB;" & _
"SERVER=10.1.111.19;", _
"only_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
Trage ich die Daten händsich über den "MySQL Query Browser" ein dann klappt die Verbindung.
Database = Standardschema, sonst die Angaben aus dem Quellcode
Jemand eine Idee?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 124525
Url: https://administrator.de/contentid/124525
Ausgedruckt am: 15.11.2024 um 01:11 Uhr
4 Kommentare
Neuester Kommentar
Hi habe deinen Änderungsvorschlag, siehe Zeile 7 gemacht
es kommt die gleiche Fehlermeldung.
Wenn ich den Port noch angeben muss, wie ist dann die Notation?
es kommt die gleiche Fehlermeldung.
Wenn ich den Port noch angeben muss, wie ist dann die Notation?
Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "MSDASQL"
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"DATABASE=KundenDB;" & _
"SERVER=10.1.111.19", _
"only_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
Hier nochmal das ganze Skript:
Gebe ich die Parameter aus Zeile 59 bis 61 in einen MySQL Browser ein dann klappt die Verbindung
Die Zugangsdaten stimmten also.
Nur der Port fehlt im meinem Skript im Vergleich zum MySQL Browswe.
Der Port ist 3304. Wo trage ich diesen in meinem Skript ein?
gebe ich in Zeile 60 folgendes ein
klappt die Verbindung auch nicht
Gebe ich die Parameter aus Zeile 59 bis 61 in einen MySQL Browser ein dann klappt die Verbindung
Die Zugangsdaten stimmten also.
Nur der Port fehlt im meinem Skript im Vergleich zum MySQL Browswe.
Der Port ist 3304. Wo trage ich diesen in meinem Skript ein?
gebe ich in Zeile 60 folgendes ein
"SERVER=10.10.111.19:3304;", _
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=KundenDB;" & _
"SERVER=10.10.111.19;", _
"only_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 DB 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
Habe die Lösung gefunden:
Damals hatten wir den Port 3306. Dieser wird standardmäßig verändert.
Da wir jetzt über den Port 3304 gehen muss dieser explizit angegeben werden. Wenn nicht versucht das Skript auf 3306 zu verbinden...
Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
"SERVER=10.111.92.173;UID=read_user;PWD=qwertz;Port=3304;database=db_Kunde"
Damals hatten wir den Port 3306. Dieser wird standardmäßig verändert.
Da wir jetzt über den Port 3304 gehen muss dieser explizit angegeben werden. Wenn nicht versucht das Skript auf 3306 zu verbinden...