Announcement

Collapse
No announcement yet.

Insert Problem bei deutschen Umlauten unter Verwendung von ISO8859_1

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Insert Problem bei deutschen Umlauten unter Verwendung von ISO8859_1

    Hallo Leute,

    ich benutze die IBConsole 1.0.0.338 und bekomme jedesmal folgende Fehlermeldung:

    Arithmetic exception, numeric overflow, or string truncation
    Cannot transliterate character between character sets
    Statement: INSERT INTO land (LAND, LANDNAME, ISOCCY) VALUES ('GB', 'Großbritannien', 'GBP')

    Dieser Fehler tritt in der folgenden SQL-Anweisung nur bei deutschen Umlauten auf.

    Nachfolgend nun die SQL:

    SET SQL DIALECT 3;
    SET NAMES ISO8859_1;

    CREATE DATABASE 'C:\Carsten\Vertrag\ORT.gdb' PAGE_SIZE 4096
    USER "TEST" PASSWORD "test"
    DEFAULT CHARACTER SET ISO8859_1;

    CREATE DOMAIN TSTR2 AS VARCHAR(2) COLLATE DE_DE;
    CREATE DOMAIN TSTR3 AS VARCHAR(3) COLLATE DE_DE;
    CREATE DOMAIN TSTR24 AS VARCHAR(24) NOT NULL collate DE_DE;

    CREATE TABLE isoccy
    (
    ISOCCY TSTR3 NOT NULL,
    ISOCCYNAME TSTR24 UNIQUE,
    CONSTRAINT PK_isoccy PRIMARY KEY (ISOCCY)
    );

    CREATE TABLE land
    (
    LAND TSTR2 NOT NULL,
    LANDNAME TSTR24 UNIQUE,
    ISOCCY TSTR3 NOT NULL,
    CONSTRAINT PK_land PRIMARY KEY (LAND),
    CONSTRAINT FK_isoccy FOREIGN KEY (ISOCCY) REFERENCES ISOCCY (ISOCCY)
    );

    CREATE TABLE ort
    (
    ORT TSTR3 NOT NULL,
    LAND TSTR2 NOT NULL,
    ORTSNAME TSTR24 UNIQUE,
    CONSTRAINT PK_ort PRIMARY KEY (ORT),
    CONSTRAINT FK_ort FOREIGN KEY (LAND) REFERENCES land (LAND)
    );

    /* Stammdaten initialisieren */

    INSERT INTO isoccy (ISOCCY, ISOCCYNAME) VALUES ('CHF', 'Schweizer Franken');
    INSERT INTO isoccy (ISOCCY, ISOCCYNAME) VALUES ('EUR', 'Euro');
    INSERT INTO isoccy (ISOCCY, ISOCCYNAME) VALUES ('GBP', 'Britisches Pfund');
    INSERT INTO isoccy (ISOCCY, ISOCCYNAME) VALUES ('JPY', 'Japanische Yen');
    INSERT INTO isoccy (ISOCCY, ISOCCYNAME) VALUES ('USD', 'US-Dollar');
    COMMIT WORK;

    INSERT INTO land (LAND, LANDNAME, ISOCCY) VALUES ('CH', 'Schweiz', 'CHF');
    INSERT INTO land (LAND, LANDNAME, ISOCCY) VALUES ('DE', 'Deutschland', 'EUR');
    INSERT INTO land (LAND, LANDNAME, ISOCCY) VALUES ('GB', 'Großbritannien', 'GBP');
    INSERT INTO land (LAND, LANDNAME, ISOCCY) VALUES ('JP', 'Japan', 'JPY');
    INSERT INTO land (LAND, LANDNAME, ISOCCY) VALUES ('US', 'USA', 'USD');
    COMMIT WORK;

    INSERT INTO ort (ORT, LAND, ORTSNAME) VALUES ('D', 'DE', 'Duesseldorf');
    INSERT INTO ort (ORT, LAND, ORTSNAME) VALUES ('F', 'DE', 'Frankfurt');
    COMMIT WORK;

  • #2
    Hallo Leute,

    durch einen Kumpel habe ich nun folgenden Tip erhalten. Man kann dies durch zusätzliche 3 Zeilen direkt im SQL-Script erreichen:
    Unter den Stammdaten initialisieren, also über der ersten Insert-Anweisung muß man folgendes einfügen:

    /* Stammdaten initialisieren */

    CONNECT 'E:\Eigene Dateien\Carsten\Delphi\Vertrag\ORT.gdb'
    USER "SYSDBA" PASSWORD "masterkey"
    CHARACTER SET ISO8859_1;

    Jetzt klappt es auch mit normalen Umlauten wie ß oder ü.

    Die Sache mit dem Zeichensatz ist nämlich, wie ein anderer Kollege mir gesagt hat, folgendermaßen:
    1. Die Datenbank muss einen haben
    2. in der IBConsole muss die Verbindung mit diesem gemacht werden
    3. IBSQL muss ebenfalls auf den Zeichensatz eingestellt werden!

    zu 1. brauche ich nix zu sagen. Bei 2. mußt du einfach
    auf die nicht verbundene Datenbank (also bevor du die
    mit nem Doppelklick öffnest) mit der rechten MT das
    Popupmenü öffnen und dann "Connect as..." auswählen.
    DOrt den Zeichensatz einstellen.

    3. in der iBSQL im Menü "Edit - Options" ebenfalls den
    Zeichensatz einstellen, wenn er dort noch nicht steht.

    Das ganze ist auch mit der Anwendung in Delphi zu
    vergleichen: Die DB wird mit nem Zeichensatz erstellt,
    und die Verbindung muss ebenfalls mit diesem
    Zeichensatz hergestellt werden (in den Params
    lc_ctype=iso8859_1).

    Grüße, Carste

    Comment

    Working...
    X