[gelöst] Zeichensatzfrage

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

[gelöst] Zeichensatzfrage

Beitrag von fliegermichl »

Hallo,

ich habe ein tdbf, ein tdatasource, ein tdbgrid und ein tdbnavigator in das Formular gesetzt. Pfad und Dateiname angegeben und tdbf.active auf true gesetzt.
Es funktioniert alles ausser den Umlauten. in TDBF gibt es einen Event onTranslate der aber nie aufgerufen wird.

Ich kann auch nirgends eine Einstellmöglichkeit für den Zeichensatz finden.
Wie gehe ich da am besten vor?

Bei der Forums- und Googlesuche finde ich nur Lösungen die mit SQL OnGetText arbeiten. Den gibt es hier aber nicht.
Zuletzt geändert von fliegermichl am Sa 10. Apr 2021, 10:17, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichensatzfrage

Beitrag von theo »


Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Zeichensatzfrage

Beitrag von fliegermichl »

Hab's gelöst.
Nachdem die Tabelle auf active gesetzt wird, muss für alle StringFelder die Eigenschaft Transliterate auf true gesetzt werden.

Code: Alles auswählen

function TForm1.datenTranslate(Dbf: TDbf; Src, Dest: PChar; ToOem: Boolean
  ): Integer;
var
  s: String;
  cp: String;
begin
    cp := 'cp' + IntToStr(Dbf.CodePage);
    if ToOEM then
      s := ConvertEncoding(Src, 'utf8', cp)
    else
      s := ConvertEncoding(Src, cp, 'utf8');
    StrCopy(Dest, PChar(s));
    Result := StrLen(Dest);
end;

procedure TForm1.CheckBox1Change(Sender: TObject);
var i : integer;
begin
  daten.active := Checkbox1.Checked;
  if daten.active then
  begin
    daten.onTranslate := @datenTranslate;
    for i := 0 to daten.Fields.Count-1 do
      if daten.Fields[i] is TStringField then
        TStringField(daten.Fields[i]).Transliterate := true;
  end;
end;  

Antworten