Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird Characterset ISO8859_1 is not defined / installed (https://www.delphipraxis.net/168807-firebird-characterset-iso8859_1-not-defined-installed.html)

Perlsau 12. Jun 2012 12:35

Datenbank: Firebird • Version: 2.51 • Zugriff über: FibPlus 6.9.6 Release for 2009

Firebird Characterset ISO8859_1 is not defined / installed
 
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 ...

mkinzler 12. Jun 2012 12:37

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Ich vermute eher, dass es an einem unvollständigen Client liegt. Was wurde alles mitgegeben nur die fbcleint.dll oder auch die anderen Dlls?

Perlsau 12. Jun 2012 12:47

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Zitat:

Zitat von mkinzler (Beitrag 1170429)
Ich vermute eher, dass es an einem unvollständigen Client liegt. Was wurde alles mitgegeben nur die fbcleint.dll oder auch die anderen Dlls?

Code:
E:\Release\PC-Heil Projektmanager\Archiv
E:\Release\PC-Heil Projektmanager\intl
E:\Release\PC-Heil Projektmanager\udf
E:\Release\PC-Heil Projektmanager\aliases.conf
E:\Release\PC-Heil Projektmanager\fbclient.dll
E:\Release\PC-Heil Projektmanager\firebird.conf
E:\Release\PC-Heil Projektmanager\firebird.log
E:\Release\PC-Heil Projektmanager\firebird.msg
E:\Release\PC-Heil Projektmanager\ib_util.dll
E:\Release\PC-Heil Projektmanager\icudt30.dll
E:\Release\PC-Heil Projektmanager\icuin30.dll
E:\Release\PC-Heil Projektmanager\icuuc30.dll
E:\Release\PC-Heil Projektmanager\libeay32.dll
E:\Release\PC-Heil Projektmanager\Microsoft.VC80.CRT.manifest
E:\Release\PC-Heil Projektmanager\midas.dll
E:\Release\PC-Heil Projektmanager\msvcm80.dll
E:\Release\PC-Heil Projektmanager\msvcp80.dll
E:\Release\PC-Heil Projektmanager\msvcr80.dll
E:\Release\PC-Heil Projektmanager\PchProjectManager_1.exe
E:\Release\PC-Heil Projektmanager\PROCODE.FDB
E:\Release\PC-Heil Projektmanager\PROCODE.pdf
E:\Release\PC-Heil Projektmanager\PROCODE.rtf
E:\Release\PC-Heil Projektmanager\ssleay32.dll
E:\Release\PC-Heil Projektmanager\intl\fbintl.conf
E:\Release\PC-Heil Projektmanager\intl\fbintl.dll
E:\Release\PC-Heil Projektmanager\udf\fbudf.dll
E:\Release\PC-Heil Projektmanager\udf\fbudf.sql
E:\Release\PC-Heil Projektmanager\udf\fbudf.txt
E:\Release\PC-Heil Projektmanager\udf\ib_udf.dll
E:\Release\PC-Heil Projektmanager\udf\ib_udf.sql
E:\Release\PC-Heil Projektmanager\udf\ib_udf2.sql
Die Dateien sind aus dem letzten Firebird-Embedded-Release:
32-bit Embedded, October 04, 2011, Firebird-2.5.1.26351-0_Win32_embed.zip, Embedded, separate download, zip kit. Custom installation required

Die Datei fbclient.dll ist die umbenannte Datei fbembed.dll.

Hansa 12. Jun 2012 14:38

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Zitat:

Zitat von Perlsau (Beitrag 1170432)
Die Datei fbclient.dll ist die umbenannte Datei fbembed.dll.

Dann kopiere mal noch die fbclient.dll nach gds32.dll.

pmoegenb 12. Jun 2012 16:28

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Was passiert, wenn Du in E:\Release\PC-Heil Projektmanager\firebird.conf den Parameter RootDirectory = aktivierst und als Pfad E:\Release\PC-Heil Projektmanager einträgst. Ferner sollte für einen konkurrierenden Zugriff der Parameter RemoteFileOpenAbility = auf 1 stehen.

Perlsau 12. Jun 2012 22:44

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Zitat:

Zitat von pmoegenb (Beitrag 1170499)
Was passiert, wenn Du in E:\Release\PC-Heil Projektmanager\firebird.conf den Parameter RootDirectory = aktivierst und als Pfad E:\Release\PC-Heil Projektmanager einträgst. Ferner sollte für einen konkurrierenden Zugriff der Parameter RemoteFileOpenAbility = auf 1 stehen.

Den Eintrag muß man nur aktivieren, wenn man die Firebird-Dateien in einem anderen Ordner ablegt, wie in der README_embedded.txt zu lesen ist:

If you want to place the Firebird files (excluding the
renamed fbembed.dll) in another directory, you need to
modify your firebird.conf and set RootDirectory to the
Firebird directory tree. Example:

c:\my_app\app.exe
c:\my_app\gds32.dll
c:\my_app\ib_util.dll
c:\my_app\icudt30.dll
c:\my_app\icuin30.dll
c:\my_app\icuuc30.dll
c:\my_app\firebird.conf
d:\fb\firebird.msg
d:\fb\intl\fbintl.dll
c:\fb\intl\fbintl.conf
d:\fb\udf\fbudf.dll

Hab's dennoch versucht, mein Tester bekommt jedoch denselben Fehler. Ich kann das hier bei mir leider nicht reproduzieren, in meiner Win7 Ultimate VM läuft das Programm.

Perlsau 12. Jun 2012 22:47

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Zitat:

Zitat von Hansa (Beitrag 1170469)
Zitat:

Zitat von Perlsau (Beitrag 1170432)
Die Datei fbclient.dll ist die umbenannte Datei fbembed.dll.

Dann kopiere mal noch die fbclient.dll nach gds32.dll.

Was soll die Namensänderung bringen? Ist immer noch dieselbe DLL, ich hatte sie auch schon als fbclientE.dll und als Embedded.dll benutzt, funktioniert bei mir alles ohne Unterschied. Ich muß lediglich Pfad und Dateiname in der Datenbank-Connection angeben, dann ist es völlig egal, wie die DLL heißt, Hauptsache der Inhalt stimmmt.

Lemmy 12. Jun 2012 23:07

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Hi,

Zitat:

Zitat von Perlsau (Beitrag 1170537)
Ich muß lediglich Pfad und Dateiname in der Datenbank-Connection angeben, dann ist es völlig egal, wie die DLL heißt, Hauptsache der Inhalt stimmmt.

d.h. Du setzt den korrekten Pfad der fb.dll beim Programmstart (ParamStr(0) oder vergleichbares)? Das wäre von mir noch ne Idee gewesen, dass auf den anderen Rechner ggf. eine FB-Serverinstallation da ist von der die client.dll verwendet wird. Da hatte ich schon die tollsten Fehlermeldungen, weil irgend wo noch ne falsche fbClient.dll rum fuhr...

Grüße

Perlsau 12. Jun 2012 23:21

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Zitat:

Zitat von Lemmy (Beitrag 1170539)
d.h. Du setzt den korrekten Pfad der fb.dll beim Programmstart (ParamStr(0) oder vergleichbares)? Das wäre von mir noch ne Idee gewesen, dass auf den anderen Rechner ggf. eine FB-Serverinstallation da ist von der die client.dll verwendet wird. Da hatte ich schon die tollsten Fehlermeldungen, weil irgend wo noch ne falsche fbClient.dll rum fuhr...

Der zweite der oben aufgeführten Tester hat definitiv keinen Firebird-Server installiert, beim ersten weiß ich's nicht, aber der schläft bereits, den kann ich jetzt nicht fragen ...

Ich hatte mein Programm hier in einer Win7-VM, in der ein Firebird-Server installiert war, ebenfalls als Embedded-Version ausprobiert. Hat problemlos funktioniert. Nach Erstellen eines VM-Sicherungspunktes und anschließendem Entfernen des Firebird-Servers (nebst allen Firebird-Dlls) hat es immer noch funktioniert. Welches BS verwendest du? Vielleicht läuft's ja bei dir ... :gruebel:

Hab dennoch Dank für deine Mühe, eine Antwort zu finden ...

Ich hab hier z.B. das Code-Orakel-Programm von Warnecke, das hat auch eine Firebird-Embedded. Allerdings ist in seiner DB als DefaultCharset nichts eingetragen, die VARCHAR-Spalten stehen auf NONE, bei mir dagegen jeweils ISO8859_1. Würde mich mal interessieren, ob Code-Orakel bei Win-7-Nutzern problemlos läuft ... Wenn ja, müßte ich "nur" meine Datenbank neu konzipieren und das Problem wäre gelöst.

pmoegenb 13. Jun 2012 06:49

AW: Firebird Characterset ISO8859_1 is not defined / installed
 
Zitat:

Zitat von Perlsau (Beitrag 1170536)
Den Eintrag muß man nur aktivieren, wenn man die Firebird-Dateien in einem anderen Ordner ablegt, wie in der README_embedded.txt zu lesen ist:

Dachte ich auch, als ich jedoch die gesamten Programmdateien auf ein gemapptes Laufwerk eines Servers legte war Schluss. Erst nach dem Eintrag der RootDirectory lief das Programm.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz