Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Mehrsprachig sichern + anzeigen (https://www.delphipraxis.net/171860-mehrsprachig-sichern-anzeigen.html)

user0815 29. Nov 2012 07:34

Datenbank: Firebird • Version: 2.5.1 • Zugriff über: UniDAC

Mehrsprachig sichern + anzeigen
 
Hallo,

was muss ich machen um folgendes zu erreichen: Text in ein TEdit Feld eingeben, diesen über einen TUniQuery in einer Firebird Tabelle speichern.
Beliebigen Text aus der DB auslesen und als Caption anzeigen (TLabel, TButton, ...)
Muss ich etwas bestimmtes beim TUniQuery einstellen, wie müsste das Feld in der DB definiert sein (Varchar, Characterset, Collation) ?

Zur Zeit wird in der DB alles als '?' angezeigt !

Als Texte: Deutsch, Englisch, Russisch, Chinesisch, Französisch, Dänisch, usw...

Grüße
user0815

Bernhard Geyer 29. Nov 2012 07:35

AW: Mehrsprachig sichern + anzeigen
 
Stichwort auf DB-Seite ist UTF-8 und auf Delphi-Seite D2009 oder neuer.

user0815 29. Nov 2012 08:04

AW: Mehrsprachig sichern + anzeigen
 
Nutze Database Workbench v4.3.2 Pro, habe dort eine Test Tabelle angelegt (DDL):

Code:
CREATE TABLE SPRACHE
(
  TAG_ID             INTEGER        NOT NULL,
  DE                 VARCHAR(   255) CHARACTER SET UTF8  COLLATE UTF8,
  EN                 VARCHAR(   255) CHARACTER SET UTF8  COLLATE UTF8,
  CN                 VARCHAR(   255) CHARACTER SET UTF8  COLLATE UNICODE_CI,
  CC                 VARCHAR(   255) CHARACTER SET UTF8  COLLATE UNICODE_CI_AI,
  CT                 VARCHAR(   255) CHARACTER SET UTF8  COLLATE UNICODE,
 CONSTRAINT PK_SPRACHE PRIMARY KEY (TAG_ID)
);
Füge ich jetzt diesen Text "Администрирование" in alle Felder manuell ein, so werden nach dem Verlassen des Feldes nur Fragezeichen angezeigt.

Delphi-Quellcode:
  with Datenmodul.UniQuery1 do
  begin
    close;
    SQL.Clear;
    SQL.Add('SELECT DE, EN, CN, CC, CT');
    SQL.Add('FROM SPRACHE');
    SQL.Add('WHERE TAG_ID = :ID;');
    ParamCheck := true;
    ParamByName('ID').AsInteger := 1;
    Open;
    Edit1.Text := FieldByName('CT').AsString;
    Label1.Caption := FieldByName('CT').AsString;
    Memo1.Lines.Append(FieldByName('CT').AsString);
    Memo1.Lines.Append(FieldByName('DE').AsString);
    Memo1.Lines.Append(FieldByName('EN').AsString);
    Memo1.Lines.Append(FieldByName('CN').AsString);
    Memo1.Lines.Append(FieldByName('CC').AsString);
    Close;
  end;
es werden nur Fragezeichen ausgegeben... darum ja meine Frage...

tsteinmaurer 29. Nov 2012 08:25

AW: Mehrsprachig sichern + anzeigen
 
Ich verwende UniDAC nicht, aber bei IBDAC muss man natürlich angeben, wenn man mit Unicode arbeiten möchte. Setzt natürlich auch Delphi 2009 oder höher voraus.

user0815 29. Nov 2012 08:53

AW: Mehrsprachig sichern + anzeigen
 
habe ja XE2, ich finde im Objektinspektor keine Einstellung für Unicode... die Query Komponente selber heisst ja auch: TUniQuery

wenn ich versuche ein Umlaut (ä) zu sichern (egal in welches Feld):

Delphi-Quellcode:
  with Datenmodul.UniQuerySave do
  begin
    Close;
    SQL.clear;
    SQL.Add('UPDATE SPRACHE');
    SQL.Add('SET');
    SQL.Add('CT = :EINGABE');
    SQL.Add('WHERE TAG_ID = :TAG_ID');

    ParamCheck := true;
    ParamByName('TAG_ID').AsInteger := 3;
    ParamByName('EINGABE').AsAnsiString := 'ä';
    Execute;
    Close;
  end;
dann erhalte ich folgende Fehlermeldung:

"Im Projekt xxx.exe ist eine Exception der Klasse EIBCError mit der Meldung '
Dynamic SQL Error
SQL error code = -303
Malformed string' aufgetreten."

tsteinmaurer 29. Nov 2012 09:04

AW: Mehrsprachig sichern + anzeigen
 
Hab mir jetzt mal die CHM-Doku von UniDAC runtergeladen und im Prinzip ist es gleich zu IBDAC bzgl. Unicode. Hast du TUniConnection.CharSet und TUniConnection.UseUnicode korrekt gesetzt?

Bernhard Geyer 29. Nov 2012 09:19

AW: Mehrsprachig sichern + anzeigen
 
Zitat:

Zitat von tsteinmaurer (Beitrag 1193524)
Hab mir jetzt mal die CHM-Doku von UniDAC runtergeladen und im Prinzip ist es gleich zu IBDAC bzgl. Unicode. Hast du TUniConnection.CharSet und TUniConnection.UseUnicode korrekt gesetzt?

Die Frage ist welche Collation bei der Datenbank eingestellt ist.
Normalerweise stellt man diese ja dort ein und nicht bei jeder Tabelle einzelne. Und nur diese Einstellung wir vermutlich Unidac zur bestimmung Unicode oder nicht herziehen.

tsteinmaurer 29. Nov 2012 09:31

AW: Mehrsprachig sichern + anzeigen
 
Hallo Bernhard,

man gibt beim Erstellen einer Firebird Datenbank einen Zeichensatz an, z.B. UTF8. Dieser wird dann zum Default-Zeichensatz und wird für jedes neue [VAR]CHAR Feld hergenommen. Man kann bei der Felderstellung allerdings auch einen anderen Zeichensatz verwenden, der vom Datenbank-Default-Zeichensatz abweicht. Zusätzlich spielen dann noch die von dir erwähnten Collations eine Rolle, mit der im Wesentlichen die Sortierreihenfolge etc. definiert wird, aber primär sollte die Collation nicht ausschlaggebend sein, um Unicode-Zeichen speichern und lesen zu können. Folgendes sollte ein guter Startpunkt sein:
  • Firebird Datenbank mit UTF8 erstellen
  • TUniConnection.SpecificOptions.Values['Charset'] := 'UTF8';
  • TUniConnection.SpecificOptions.Values['UseUnicode'] := 'True';

Ich hoffe, dass die TUniConnection Einstellungen so korrekt sind, habe Unidac nicht im Einsatz, nur die Doku offen.

user0815 29. Nov 2012 10:08

AW: Mehrsprachig sichern + anzeigen
 
Zitat:

Firebird Datenbank mit UTF8 erstellen
habe hier 'NONE' stehen, Mist nicht aufgepasst... kann man das nachträglich ändern ?

tsteinmaurer 29. Nov 2012 10:33

AW: Mehrsprachig sichern + anzeigen
 
Nur durch Neuerstellung der Datenbank basierend auf einem SQL-Skript und falls die Daten erhalten bleiben müssen, dann ist ein Datentransfer in die neu erstellte Datenbank notwendig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:59 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