MariaDB und libmysql.dll

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Joh
Lazarusforum e. V.
Beiträge: 187
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

MariaDB und libmysql.dll

Beitrag von Joh »

Moin,

ich weiß, es wurde dutzende Male angesprochen, war aber nix für mich dabei?!

Ich habe:
- Anwendung 64bit Windows mit Firebird-Datenbank
- Webseite mit MariaDB v. 10.5.18 (also MySQL 8.x-kompatibel)

Blauäugig wie ich bin, habe ich mir eine MySQL80-Connection aufs Formular gelegt,
MariaDB Server 10.5.18 für Windows heruntergeladen, die libmariadb.dll in libmysql.dll umbenannt und klar:
The MySQL80Connection can not work with the installed MySQL Client Version: Expected (8.0), got (10.5.18).
OK, ist ja theoretisch richtig. Aber ich will MySQL ja weder nutzen noch kaufen...
Und mich mit den (englischsprechigen) MySQL-Nutzungsbedingungen herumschlagen will ich auch nicht.

Wie bekomme ich (legal) eine Verbindung von lazarus zu MariaDB?
just my two Beer

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: libmysql.dll Win 64bit

Beitrag von charlytango »

Du kannst mal mein Datenbank Zugriffs Modul verwenden um einige Versionen und Kombinationen auszutesten.
Einfach "zu Fuß" in der configdb.ini oder im Beispielprogramm einige Testkombinationen anlegen und versuchen eine Verbindung herzustellen.

Dass MariaDB bei SQLdb so vernachlässigt wird verstehe ich auch nicht aber ich kann problemlos mit einem 5.6 Connector und einer 5.66 library auf eine 10.4 MariaDB zugreifen.

Database Name: test
Database Connector: MySQL 5.6
Database Version: 10.4.27-MariaDB
Library: libmariadb.dll version 5.66


Wenn du die Zugriffsbibliothek manuell zuweist (es also nicht dem SQLConnector überlässt die namentlich richtige Datei auszusuchen) scheint der Namen der Bibliothek unerheblich zu sein.
Die Versionsprüfung macht er aber trotzdem. Es gibt einen Schalter der die Versionsprüfung aussschaltet, der ist aber von außen über einen TSQLConnector nicht erreichbar.

in mysqlconn.inc steht:

Code: Alles auswählen

  MariaDBVersion =
{$IFDEF mysql57}
    '10.';
{$ELSE}
{$IFDEF mysql56}   // MariaDB 10.0 is compatible with MySQL 5.6
    '10.';
{$ELSE} // MariaDB 5.1..5.5 presumably report the same version number as MySQL
    MySQLVersion;
{$ENDIF}
{$ENDIF}
und weiters

Code: Alles auswählen

procedure TConnectionName.DoInternalConnect;
var
  FullVersion: string;
begin
  InitialiseMysql;
  if not SkipLibraryVersionCheck then
    begin
    FullVersion:=strpas(mysql_get_client_info());
    // Version string should start with version number:
    // Note: in case of MariaDB version mismatch: tough luck, we report MySQL
    // version only.
    if (pos(MySQLVersion, FullVersion) <> 1) and
       (pos(MariaDBVersion, FullVersion) <> 1) then
      Raise EInOutError.CreateFmt(SErrVersionMisMatch,[ClassName,MySQLVersion,FullVersion]);
    end;  
  inherited DoInternalConnect;
  ConnectToServer;
  SelectDatabase;
end;
Der interne Connect negiert also tapfer MariaDB ('tough luck') hat aber eine Möglichkeit die Versionsprüfung abzuschalten. Diese Möglichkeit wird im TSQLConnector (also dem Proxy für alle DB-Verbindungen) nicht durchgereicht. In einer TMySQL80Connection allerdings kannst du per SkipLibraryVersionCheck im Objektinspektor den Versionscheck wohl abschalten.
Ein Versuch wäre es allemal wert.
Zuletzt geändert von charlytango am Fr 13. Jan 2023, 00:32, insgesamt 1-mal geändert.

Joh
Lazarusforum e. V.
Beiträge: 187
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: libmysql.dll Win 64bit

Beitrag von Joh »

hmmm...

Danke.
Das geht heute nicht mehr in mein Hirn...
Aber morgen ist ja bekanntlich auch noch ein Tag.
just my two Beer

charlytango
Beiträge: 843
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: libmysql.dll Win 64bit

Beitrag von charlytango »

ggg
einfach mal testweise SkipLibraryVersionCheck im Object Inspector aktivieren und sehen was passiert ;-)

Joh
Lazarusforum e. V.
Beiträge: 187
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: libmysql.dll Win 64bit

Beitrag von Joh »

charlytango hat geschrieben:
Do 12. Jan 2023, 23:58
In einer TMySQL80Connection allerdings kannst du per SkipLibraryVersionCheck im Objektinspektor den Versionscheck wohl abschalten.
Ein Versuch wäre es allemal wert.
Danke...
Das habe ich übersehen. Scheint zu funktionieren.
Aber mit Daten testen werde ich es erst morgen (heute).

PS: Für einfache DB-Updates mit DELETE und INSERT zum Aktualisieren einiger Tabellen sollte die Version eh keine Rolle spielen. Da sollte IMHO jeder MySQL-Connektor funktionieren.
just my two Beer

Joh
Lazarusforum e. V.
Beiträge: 187
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: libmysql.dll Win 64bit

Beitrag von Joh »

Funktioniert!

Und diese Eigenschaft ist in allen MySQL-Connections vorhanden.
Jetzt muß das nur noch in die Doku übernommen werden.


Warum gucke ich mir im Netz eigentlich immer wieder irgendwelche abstrusen Möchtegern-Lösungen für mein Problem an, wenns so einfach sein kann.
Im aktuellen Beispiel patchen der MySQL-Connection in Lazarus incl. Lazarus-Neukompilierung. Klar kann man das machen, aber spätestens beim nächsten Update oder beim Arbeiten vor Ort mit dem Laptop fall ich dabei auf die Nase.
just my two Beer

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: libmysql.dll Win 64bit

Beitrag von af0815 »

Patch einreichen und sich mal die Reaktion von den Devs ansehen, vielleicht wird das direkt übernommen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten