Hallo Entwicklergemeinde,
seit Tagen knoble ich an einem Problem herum, für das ich keine Lösung finde. Ich habe eine Datenbank-Anwendung mit Firebird embedded gebastelt, soll als Stickware funktionieren. Doch die beiden Beta-Tester, die sich erbarmt haben, meine Kreation zu testen, bekommen sie nicht zum Laufen, obwohl sie bei mir als Embedded wie auch mit installiertem Server einwandfrei läuft.
Der erste Tester verwendet Windows 7 Ultimate und erhält die Meldung:
Code:
Fehler beim Verbinden mit der Datenbank (das ist mein ShowMessage-Text) ... Connection Error ... Characterset ISO8859_1 is not defined
Der zweite Tester arbeitet mit Windows Server 2008 R2 und bei ihm kommt:
Code:
Fehler beim Verbinden mit den Datasets (das ist mein ShowMessage-Text) ... DatMod.Dset_Kunde.SelectQuery: undefined name. Characterset ISO8859_1 is not installed
In der SelectQuery steht z.B.
Meine Verbindungsprocedure sieht so aus:
Delphi-Quellcode:
FUNCTION TDatMod.VerbindenDatenbank(Modus : Byte): Boolean;
BEGIN
Result := FALSE;
IF Modus > 2
THEN EXIT;
FibBase.SQLDialect := 3;
FibBase.ConnectParams.Password := '
kl45ug13';
FibBase.ConnectParams.UserName := '
PNS7RD19';
FibBase.ConnectParams.CharSet := '
';
IF NOT FileExists(Pfad + Datenbank)
THEN
ShowMessage('
Datei "' + Pfad + Datenbank + '
" nicht gefunden ...');
IF NOT FileExists(Pfad + '
firebird.msg')
THEN
ShowMessage('
Datei "' + Pfad + '
firebird.msg" nicht gefunden ...');
IF NOT FileExists(Pfad + '
fbclient.dll')
THEN
ShowMessage('
Datei "' + Pfad + '
fbclient.dll" nicht gefunden ...');
CASE Modus
OF
0 :
BEGIN // Embedded
FibBase.AliasName := '
';
FibBase.DBName := Pfad + Datenbank;
FibBase.LibraryName := Pfad + '
fbclient.dll';
END;
1 :
BEGIN // Lokaler Datenbankserver
FibBase.AliasName := '
PCODE';
FibBase.DBName := '
E:\Datenbanken\' + Datenbank;
FibBase.LibraryName := '
D:\Programme\Database\Firebird_2_5\bin\fbclient.dll';
END;
2 :
BEGIN // Remote Datenbankserver
EXIT;
END;
END;
TRY
FibBase.Connected := TRUE;
Result := TRUE;
EXCEPT
ON e:
exception DO
BEGIN
ShowMessage('
Fehler beim Verbinden mit der Datenbank: ' + e.
Message);
Result := FALSE;
EXIT;
END;
END;
END;
und
Delphi-Quellcode:
{*****************************************************************************************************************************************
*** VERBINDEN: DATASETS ***
*****************************************************************************************************************************************}
FUNCTION TDatMod.VerbindenDatasets : Boolean;
BEGIN
Result := FALSE;
IF NOT FibBase.Connected
THEN EXIT;
TRY
Trans_Default.Active := TRUE;
Trans_Update.Active := TRUE;
Dset_Benutzer.Active := TRUE;
Dset_Kunde.Active := TRUE;
...
Result := TRUE;
Except
ON e:
exception DO
BEGIN
ShowMessage('
Fehler beim Verbinden mit den Datasets: ' + e.
Message);
Result := FALSE;
EXIT;
END;
END;
VerbindenDataSources;
END;
Aufgerufen wird das in FormActivate der Hauptform:
Delphi-Quellcode:
{*****************************************************************************************************************************************
*** ON ACTIVATE ***
*** 0 Embedded = Datenbank im Programm-Ordner ***
*** 1 Lokal = Datenbank über Firebird-Server auf demselben Rechner ***
*** 2 Remote = Datenbank über Firebird-Server auf anderem Rechner im Netzwerk oder im Internet ***
*****************************************************************************************************************************************}
procedure TFormMain.FormActivate(Sender: TObject);
begin
DatMod.Pfad := ExtractFilePath(ParamStr(0));
Version := 0;
// Mit Datenbank verbinden
IF NOT DatMod.VerbindenDatenbank(Version) THEN
BEGIN
CLOSE;
EXIT;
END;
// Mit Datasets und Transactions verbinden
IF NOT DatMod.VerbindenDatasets THEN
BEGIN
CLOSE;
EXIT;
END;
Die Datenbank hat als Default-Zeichensatz ISO8859_1, die Zeichensätze der VARCHAR-Spalten stehen ebenfalls auf ISO8859_1, Collation ist DE-DE, bei den Text-Blobfeldern ebenfalls ISO8859_1.
Irgend etwas läuft da gewaltig schief ... Ist doch nicht die erste Firebird-Embedded, die ich verwende und weitergebe. Was ist da nur los?
P.S.: Das ganze Projekt hat knapp 175.000 Zeilen und ist daher zu groß, um es hier komplett zu posten. Wäre auch nicht sinnvoll ...