Einzelnen Beitrag anzeigen

Perlsau
(Gast)

n/a Beiträge
 
#1

Firebird Characterset ISO8859_1 is not defined / installed

  Alt 12. Jun 2012, 13:35
Datenbank: Firebird • Version: 2.51 • Zugriff über: FibPlus 6.9.6 Release for 2009
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.
Code:
SELECT * FROM KUNDE
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 ...
  Mit Zitat antworten Zitat