Announcement

Collapse
No announcement yet.

Character Set Problem

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

  • Character Set Problem

    hallo,

    ich habe per datapump ein komplettes tabellen-system bestehend aus einer ganzen anzahl von paradox(5)-tabellen in eine IB-datenbank gepumpt. bis dahin kein problem. jetzt habe ich in der delphi-anwendung bzw im datenmodul der anwendung die tables gegen ibtables ausgetausch. die daten werden auch einwandfrei angezeigt. aber dann: beim versuch, datensätze hinzuzufügen kommt die meldung "...Cannot transliterat character between character sets". Nun denn, ich habe im IBdatabase-objekt die bekannten Charactersets ISO88xx_1 und WIN1552/1553 eingesetzt - der fehler ist der gleiche. was mache ich falsch???

    hartmut.

  • #2
    Hallo Hartmut,

    werden bei Dir auch 'ü', 'ö' usw. korrekt angezeigt (vermutlich nicht).

    Wenn Du auf Deine IBDataBase-Komponente einen Doppelklick machst, öffnet sich ein Fenster. Ist dann unter Zeichensatz der richtige Eintrag vorhanden?

    Tschüß

    Torste

    Comment


    • #3
      Hallo,

      es sind leider immer zwei Stellen beteiligt: Die InterBase-Datenbank und die Client-Konfiguration. Somit wird man nur dann ein brauchbares Ergebnis erhalten, wenn bei beiden Stellen die <b>gleichen</b> Zeichensätze definiert werden.
      <pre>
      CREATE DATABASE "C:\TMP\1.GDB"
      USER "SYSDBA" PASSWORD "masterkey"
      DEFAULT CHARACTER SET ISO8859_1;
      </pre>
      Soll die Datenbank über <b>TIBDatabase</b> angelegt werden, würde das so aussehen:
      <pre>
      with IBDatabase1 do
      begin
      DatabaseName := EditDBPath.Text;
      Params.Add(Format('USER "%s"', [EditUserName.Text]));
      Params.Add(Format('PASSWORD "%s"', [EditPassword.Text]));
      Params.Add('PAGE_SIZE 4096');
      Params.Add('DEFAULT CHARACTER SET ISO8859_1');
      CreateDatabase;
      end;
      </pre&gt

      Comment


      • #4
        danke torsten und andreas,

        natürlich habe ich bereits einiges ausprobiert, jedoch habe ich bei der erstellung der datenbank keinerlei angaben zum characterset gemacht, während ich dem IBDataset den ISO8859_1 eingestellt habe. kann ich nachträglich der datenbank diesen characterset "aufzwingen" oder muss die ganze db erneut per datapump importiert werden? ich habe bereits versucht, im ISQL mit set character etwas zu erreichen und ebenso mit den advanced settings (characterset at connection) - das scheint aber nur solange vorzuhalten, bis ich ISQL wieder schliesse. es wird anscheinend nichts in der datenbank gespeichert.

        gruss,

        hartmut

        Comment


        • #5
          Hallo Hartmut,

          einen Datenbank weit gültigen Character Set kannst Du nicht ändern. Da hilft nur ein erneutes Erzeugen der Datenbank. Im Notfall könntest Du allen relevanten Tabellenspalten einen neuen Character Set zuweisen.

          Tschüß

          Torste

          Comment


          • #6
            Hallo Herr Kosch,

            die Sache mit den Character Sets ist recht unverständlich und kompliziert. Wenn ich die Datenbank mit einem ISQL-Script und dem Befehl Create Database ..... Default Character Set ISO8859_1 erzeuge kann ich bei Interbase 6 keine ä,ü,ö etc einfügen. Offenbar ist da bei Interbase 6.0 etwas geändert worden? Es lassen sich dann auch keine Zeichenketten, die Umlaute enthalten, mit einem Delphiprogramm einfügen. Dies geht nur, wenn ich Default Character Set ISO... weglasse, dann geht allerdings die deutsche Sortierung verloren. Vielleicht gibt mir hier jemand einen Tip.

            Bruno Schmelze

            Comment


            • #7
              Hallo Herr Schmelzer,

              wie schon Adreas Kosch immer sagte: "Es sind immer zwei Stellen beteiligt!"
              Vermutlich haben Sie im ISQL nicht den DCS eingestellt (nehme ich aus eigener leidvoller Erfahrung mal an):

              Im ISQL im Menü unter Edit-Options kann der Default Character Set für die ISQL eingestellt werden, incl. dem Datenbankdialekt.

              Im Delphiprogramm muß bei der Anmeldung mit IBDatabase in den Params folgendes eingetragen werden:

              user_name=<>
              password=<>
              lc_ctype=ISO8859_1 <- für den Character Set

              Grüße
              Wolfgang Lemmermeye

              Comment


              • #8
                Hallo,

                zur Zeit hat die IBConsole noch eine massive Macke, so dass ich bei Problemen die Arbeit in 4 Schritte aufteilen würde:

                1. Neue Datenbank mit dem Zeichensatz ISO8859_1 über den IBConsole-Dialog erzeugen (kein Script!)<br>
                2. Danach in IBConnect die Funktion <b>Connect As...</b> aufrufen, und im Login-Dialog auch den richtigen Zeichensatz auswählen. <br>
                3. Danch das Fenster <b>Interactive SQL</b> aus IBConsole heraus aufrufen und dort im Dialog <b>Options</b> den Dialect und den Zeichensatz festlegen. <br>
                4. Erst danach das restliche SQL-Script (ohne die CREATE DATABASE-Anweisung) ausführen.

                Dieser mühsame Weg sollte immer funktionieren

                Comment

                Working...
                X