Einzelnen Beitrag anzeigen

Benutzerbild von Mamphil
Mamphil

Registriert seit: 17. Jul 2004
Ort: Garching b. München
149 Beiträge
 
Delphi 7 Professional
 
#2

Re: mysqld_s.pas : Datenbankverbindung zum embedded MySQL-Se

  Alt 16. Sep 2004, 19:33
Hi!

Dann werde ich mir mal selbst antworten:

Der Fehler kam daher, dass der embedded Datenbank-Server noch nicht initialisiert war. Das geht übrigens per:
Delphi-Quellcode:
var
  pf : string;
  erg : integer;
begin
  pf := ExtractFilePath(application.exename);
  pf := copy(pf,1,length(pf) -1);
  argv[0] := pchar('');
  argv[1] := pchar('--basedir='+pf);
  argv[2] := pchar('--datadir='+pf+'\mydata');
  argv[3] := pchar('--language='+pf);
  argv[4] := pchar('--skip-innodb'); //no innodb with embedded version
  erg := mysql_server_init(5,@argv,nil);
  if erg <> 0 then
  begin
    Showmessage('Can not initiate mysql-server');
  end
  else
    Showmessage('Server successfull initiated!');
end;
Nur der Vollständigkeit halber sei das folgende erwähnt:

Wenn beim initialisieren des Servers die Anwendung ohne einen Mucks abstürzt bzw. sich beendet, findet man im Verzeichnis unter datadir angegebenen Verzeichnis (im Beispiel der Ordner "mydata" innerhalb des Projektverzeichnisses) eine <computername>.err-Datei, die ein paar hilfreiche Fehlermeldungen enthält.

Ich bin noch über zwei weitere Hürden gestolpert: Natürlich müssen (wie in der readme.txt der mysqld_s.pas beschrieben) die Dateien libmySQLd.dll, errmsg.sys und errmsg.txt im Projektverzeichnis vorhanden sein (die mysqld_s.pas natürlich auch!). Diese Dateien bekommt man aus dem MySQL-Windows-Paket (das ohne Installer genügt). Die errmsg.*-Dateien finden sich zum Beispiel im Verzeichnis mysql-*.*.*-win\share\english und die dll-Datei in mysql-*.*.*-win\Embedded\DLL\release . Bei den Beispielen sind zwar schon die errmsg-Dateien dabei, selbige müssen aber zwingend ersetzt werden, da es sonst Versionskonflikte mit der DLL-Datei geben (kann), die auch nur in der .err-Datei als Fehlerquellen genannt werden.

Und dann klappt's auch mit dem embedded Server. Nur zum Schluss sollte noch per mysql_server_end; der embedded Server beendet werden.

(Ein letzter Tipp: das Tutorial MySQL ohne Komponenten erklärt, wie per mysql.pas auf einen MySQL-Server zugegriffen wird, der nicht embedded ist. Die Vorgehensweise ist bei der mysqld_s.pas aber mit der bei der mysql.pas identisch, bis auf das oben genannten mysql_server_init(...)

Mamphil
  Mit Zitat antworten Zitat