Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.352 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Über FireDac auf MariaDB zugreifen: Nicht unterstütze MySQL-Version

  Alt 25. Okt 2017, 10:18
In der aktuellen Delphiversion ist das übrigens gefixt, da funktioniert es auch so.

Ich habe für die Version vorher (ich glaube Seattle) schlicht die Funktion im Speicher gepatcht, dann braucht man keine Kopie der Unit. Das sieht dann schlicht so aus:
Delphi-Quellcode:
uses
  Winapi.Windows, System.SysUtils,
  FireDAC.Stan.Consts, FireDAC.Phys.MySQLWrapper;

procedure AllowFireDACMariaDBVersions;

implementation

type
  THackMySQLLib = class(TMySQLLib);

function GetIncrement: Integer;
begin
  Result := 0;
  if CompilerVersion >= 31 then
  begin
    Result := $73;
  end else if CompilerVersion <= 27 then
  begin
    Result := $77;
  end;
end;

procedure SetMaxMySQLLib(const AValue: Integer);
var
  ConstAddr: PByte;
  OldProtect: DWORD;
  Increment: Integer;
begin
  ConstAddr := PByte(@THackMySQLLib.LoadEntries);
  Increment := GetIncrement;
  Inc(ConstAddr, Increment);
  VirtualProtect(ConstAddr, SizeOf(mvMySQL060200), PAGE_READWRITE, OldProtect);
  if mvMySQL060200 <> PInteger(ConstAddr)^ then
  begin
    raise Exception.Create('Interner Fehler: Maximale MySQL Versionsnummer konnte nicht korrigiert werden!');
  end;
  PInteger(ConstAddr)^ := AValue;
  VirtualProtect(ConstAddr, SizeOf(mvMySQL060200), OldProtect, OldProtect);
end;

procedure AllowFireDACMariaDBVersions;
begin
  SetMaxMySQLLib(2000000000);
end;
Ich habe allerdings nicht noch andere Versionen von Delphi ausführlich getestet. Mit Seattle sollte es auf jeden Fall gehen.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat