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