bacaaardi
Goto Top

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):

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?

Content-ID: 124525

Url: https://administrator.de/contentid/124525

Ausgedruckt am: 15.11.2024 um 01:11 Uhr

TsukiSan
TsukiSan 10.09.2009 um 01:09:50 Uhr
Goto Top
Hallo Bacaaardi,

ohne den Script zu testen, lass doch mal in Zeile 07 das ";" nach
der Adresse weg. Eventuell liegt da schon der Fehler.

Gruß
Tsuki
KikiMiki
KikiMiki 10.09.2009 um 10:16:29 Uhr
Goto Top
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?

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
KikiMiki
KikiMiki 10.09.2009 um 10:32:03 Uhr
Goto Top
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
"SERVER=10.10.111.19:3304;", _  
klappt die Verbindung auch nicht


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  
KikiMiki
KikiMiki 10.09.2009 um 13:11:52 Uhr
Goto Top
Habe die Lösung gefunden:

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...