Xojo 2021: Keine Verbindung mit MySQL unter Windows?

Ich habe ein DB-Frontend unter Xojo 2021 mit dem MySQLCommunityServer-Plugin entwickelt. Die ganze Zeit unter MacOS keinerlei Problem. Dann die App für Windows X64 /Zielsystem Win 11) compiliert und immer nur die Fehlermeldung: “Verbindung zur Datenbank nicht möglich”.

Was ich versucht habe:

  • 64-Bil-Version der App
  • 32-Bit-Version der App
  • Windows-Firewall aus
  • Windows-Defender aus
  • App als Admin gestartet
  • LAN und WLAN getestet
  • Browser/Surfen funktioniert
  • 2 versch. reale Computer und eine VM unter VirtualBox

Immer das gleiche Problem. Dabei läuft die Mac-Version au sdem gleichen Netz, bei VM von der gleichen Maschine völlig problemlos. Was ist das? Danke für Tips.

Wie sieht denn der Code aus?

Zufällig dieser Sicherheitswahn das in der MySQL Server Config nur locale Verbindungen erlaubt sind deine EXE aber auf einem anderen Gerät ist?

Na “ganz gewöhnlich”, wie ich schrieb läuft es ja unter MacOS …

Dim db As New MySQLCommunityServer

db.Host = db_server.text
db.DatabaseName = db_name.text
db.UserName = db_user.text
db.Password = db_pass.text

if db.Connect then
  MsgBox "DB Verbindung hergestellt!"
  db.Close
else
  MsgBox "DB Verbindung konnte nicht hergestellt werden?"
end if

Nein, ist extra freigeschaltet. Bei All-Inkl (Provider) gibts dafür einen Button in der Web-GUI. Unter MacOS läuft es ja … sogar aus dem fahrenden ICE, vom WE-Grundstück … quasi überall. Muss etwas mit Windows zu tun haben.

Gibt es einen Fehlercode?

Bei aktuellen Xojo Versionen gibt db.Connect kein True/False mehr zurück, sondern eine Exception (siehe Dokumentation db.connect).
Schon mal geschaut, ob die Verbindung nicht doch korrekt aufgebaut wurde und nur die Meldung falsch ist?

Dein Einwand würde zwar das aktuelle Verhalten unter Windows erklären, aber was ist mit MacOS? Da funktioniert db.connect als boolean … ? Ich teste das, danke für den Hinweis …

Die Frage ist absolut berechtigt, muss mir mal eine entsprechede Testversion bauen … kommt in Kürze.

So, ich habe mal eine kleine Testapp mit db.connect in einem Try/Catch-Konstrukt mit dem folgenden Code gemacht. Unter MacOS läuft sie völlig problemlos, unter Windows gibts die Fehlermeldung: “SSL connection error: unknown error number”.
Das Seltsame: Ich will gar keine SSL-Verschlüsselung, sieht man doch am Code, oder?

Dim db As New MySQLCommunityServer
Dim ret As Boolean = False
Dim ers As String

db.Host = db_host.Text
db.DatabaseName = db_name.Text
db.UserName= db_user.Text
db.Password= db_passwd.Text

Try
  db.Connect
  ret = True
Catch err As DatabaseException
  ret = False
  ers = err.Message
End Try

If ret Then
  MsgBox "drin!"
  db.Close
Else
  MsgBox ers
End If

In einem anderen Post fand ich den Hinweis auf “db.secureAuth = false”, brachte aber auch keine Änderung. Ich las auch, das Plugin aus einem Xojo 2015 zu verwenden, das werde ich nun versuchen …

Leider ein Fehlschlag! Das 2015er Plugin bricht die Compilation ab, mit der Meldung:

“MySQLPreparedStatement.Name
This class is missing the ExecuteSQL method from the interface PreparedSQLStatement.
MySQLPreparedStatement”

Was für eine Sch … dabei will brauche ich überhaupt kein “MySQLPreparedStatement” … :face_vomiting:

So ein altes Plugin würde ich nie verwenden. Es gibt die Property SSLEnabled, die Du noch versuchen könntest.

Ich bin kein MySQL-Experte. Ist es möglich, daß MySQL eine SSL-Verbindung will? Kannst Du das im Admin-Bereich von MySQL überprüfen?

Wenn das auch nichts bringt, kannst Du - nur zum Testen - mal das MBS-Plugin versuchen. Das hat mir schon Körperteile gerettet.

Nutz bitte auch mal den Port und gib an, das SSL nicht verwendet werden soll:

db.Port = 3306
db.SSLMode = False

Evtl. wird das ja unter Windows etwas strikter gehandhabt als auf dem Ma.

Dim db As New MySQLCommunityServer
Dim ret As Boolean = False
Dim ers As String

db.Host = db_host.Text
db.DatabaseName = db_name.Text
db.UserName= db_user.Text
db.Password= db_passwd.Text
db.SSLMode = False
db.SecureAuth = False
db.SSLEnabled = False
db.port = db_port.Text.Val

Try
  db.Connect
  ret = True
Catch err As DatabaseException
  ret = False
  ers = err.Message
End Try

If ret Then
  MsgBox "drin!"
  db.Close
Else
  MsgBox ers
End If

Mit den Ports 3306 (SSL-Fehler) und 3307 (no connection) probiert, kein Erfolg unter Windows.

Die Ursache muss mit Windows bzw. dem Windows-Code im Plugin zu tun haben! Unter MacOS läuft es und auch unter Linux auf einem Raspi. Immer der selbe Code und immer der selbe MySQL-Server.

Am MBS-Plugin “schreckt” mich zur Zeit ab, dass es auf externe Libs bzw. DLLs zurückgreift. Das erschwert die möglicherweise die Installation bei Fremden …

Schon irgendwie erstaunlich. Bei mir läuft folgender Code seit Langem, auch auf Windows, einwandfrei - allerdings ist da SSL zulässig:

Var DB as New MySQLCommunityServer

DB.Host = "<IP-ADRESSE>"
DB.Port = 3306
DB.DatabaseName = "<DATENBANKNAME>"
DB.UserName = "<BENUTZERNAME>"
DB.Password = "<PASSWORT"
DB.SSLEnabled = True

Try
  DB.Connect
  
Catch error As DatabaseException
  System.Beep
  MessageBox "Connection failed. Error: " + error.Message
End Try

Könnte es evtl. sein das der mySQL Server SSL erfordert und das unter macOS und Linux dann implizit aktiviert wird und bei Windows nicht?

Ich habe in mein Xojo 2021 das Plugin von 2023 eingestzt, funzt …

:sweat_smile: :sweat_smile: :sweat_smile:

die entsprechenden DLLs würdest Du im Programmordner mitliefern und somit wäre das kein Problem.

Ich habe die Erfahrung mit SSL und dem MySqlCommunityServer-Plugin auch schon machen müssen. Ich hatte mehrere Apps ewig auf einem Linux-Server laufen und musste dann auf eine MySql in Azure wechseln. Das hat auf Mac und Windows gut funktioniert, nur nicht auf Linux da dort anscheinend das Plugin kein TLS1.2 unterstützt :frowning: