TSQLConnector verbindet nicht wie er sollte

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
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

TSQLConnector verbindet nicht wie er sollte

Beitrag von charlytango »

Nachdem ich nun das Modul für den Wechsel von Datenbanken fertig habe was der erste Test gegen eine MariaDB in einer XAMPP Installation.

Leider verweigert die strenge Prüfprozedur des TSQLConnectors die Mitarbeit.
error01.png
error01.png (6.16 KiB) 636 mal betrachtet
Und egal welche Bibliotheksversion ich versucht habe und egal welchen ConnectorType ich eingestellt habe, wurde immer mit einer Version 0.8 verglichen.

Bislang konnte ich das Problem bis in die Datei mysqlconn.inc zu folgender Prozedur verfolgen:

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;
Wobei ich das Negieren von MariaDB angesichts ihrer aktuellen Reichweite doch eher kritisch sehe. Das launige "tough luck" hats dann auch nicht gebracht.

Scheinbar kann man die Versionsprüfung abschalten und es gibt ein Published Property.
Natürlich hab ich probiert die Prüfung abzuschlaten aber irgendwie komm ich da nicht ran -- Irgend eine Idee?

udmsqldb.pas(326,17) Error: identifier idents no member "SkipLibraryVersionCheck"
als ich versuchte dem TSQLConnector das zu verklickern.

Code: Alles auswählen

TConnectionName = class (TSQLConnection)
....
  published
    Property SkipLibraryVersionCheck : Boolean Read FSkipLibraryVersionCheck Write FSkipLibraryVersionCheck;
Weiß da jemand Genaueres über dies Datenbankanbindungen? Offensichtlich scheint es für MySQL und MariaDB keine Unterscheidung zu geben und es wird immer mit der Version 8.0 verglichen - egal welchen ConnectorType man auswählt. ????

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: TSQLConnector verbindet nicht wie er sollte

Beitrag von charlytango »

Das war erstmal ein Bock -- sauber mit Blattschuss erlegt.

Das INI-File aus dem die Connectort-Type Information geholt wurde, wurde beim Wchsel des Connectors nicht upgedated. Mea Culpa, sorry

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: TSQLConnector verbindet nicht wie er sollte

Beitrag von charlytango »

Trotzdem scheint es da ein Problem mit einigen DLLs und auch mit MariaDB zu geben denn ich kann einfach nicht mit allen Kombinationen zur Datenbank verbinden.

Bislang gelang das nur mit dem Connector "MySQL 5.5" und eine libmysql.dll mit der Versionsnummer 5.5.8

Das Abschalten der Versionsprüdung hätte definitiv Charme ;)
Ich teste weiter..

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: TSQLConnector verbindet nicht wie er sollte

Beitrag von af0815 »

Es gibt bei MS-SQL auch ein paar Einschränkungen diese Art. Nur weil es weniger unter Wondows und Allgemein verwendet wird, fällt es weniger auf. Dort muss man sich die richtigen Komponenten für den jeweiligen SQL-Server suchen, besonders wenn man die freeTDS verwendet. Zusätzlich wird nicht alles was der Server kann unterstützt, wie mir schon öfters schmerzlich aufgefallen ist.

Generell sehe ich es darin begründet, das die SQl-Sever Hersteller (egal ob OpenSource oder CLosed Source) imm wieder (Verschlimm-) Besserungen and ihren Servern und der Verbindung vornehmen. Die müsen dann die Connections unter Lazarus - genaugenommen der FPC mit der FCL fressen und ausgleichen. Wenn man tiefer geht, so wird man immer auf die Connection stossen, das die ganz einfach die Schnittstelle zu den Treibern ist. Und dort liegt der Hund dann in den kleinen Details begraben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten