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.
[gelöst] Zeichensatzfrage
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1645
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
[gelöst] Zeichensatzfrage
Zuletzt geändert von fliegermichl am Sa 10. Apr 2021, 10:17, insgesamt 1-mal geändert.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1645
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Zeichensatzfrage
Hab's gelöst.
Nachdem die Tabelle auf active gesetzt wird, muss für alle StringFelder die Eigenschaft Transliterate auf true gesetzt werden.
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;