Umlaute bei TDBF
-
- Lazarusforum e. V.
- Beiträge: 280
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Umlaute bei TDBF
Moin zusammen,
mein erster Versuch mit lazarus und latürnich der erste Hänger, bevor ich richtig angefangen habe.
Ich habe mir eine Form erstellt, darin
- ein TDBF zu einer Foxpro-Tabelle
- einen Datasource
- einen DBNavigator
und ein paar Felder aus der Tabelle als TDBEdit.
So weit, so gut, lief auch fast auf Anhieb.
Jetzt fehlen mir aber die Umlaute; es wird nur ein ? dargestellt.
Ich hab' mir auch schon andere Threads zu dem Thema angeguckt, dabei wurde z.B.UTFEncode/UTFDecode als Lösung angegeben. Aber wo? Und vor allem, wie?
Jochen
mein erster Versuch mit lazarus und latürnich der erste Hänger, bevor ich richtig angefangen habe.
Ich habe mir eine Form erstellt, darin
- ein TDBF zu einer Foxpro-Tabelle
- einen Datasource
- einen DBNavigator
und ein paar Felder aus der Tabelle als TDBEdit.
So weit, so gut, lief auch fast auf Anhieb.
Jetzt fehlen mir aber die Umlaute; es wird nur ein ? dargestellt.
Ich hab' mir auch schon andere Threads zu dem Thema angeguckt, dabei wurde z.B.UTFEncode/UTFDecode als Lösung angegeben. Aber wo? Und vor allem, wie?
Jochen
just my two Beer
-
- Beiträge: 132
- Registriert: Mi 23. Sep 2009, 08:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Umlaute bei TDBF
Um Dir helfen zu können noch ein Frage:
War die Tabelle bereits mit Daten gefüllt? Wenn ja kann es daran liegen, das TDBF die Daten als Dbase ansieht und die Umlaute im Dos Modus übersetzt.
In diesem Fall bei TDBF die Einstellung für Fox oder Windows Umlaute nehmen, das sollte gehen so wie ich mich erinnere.
Hausi
War die Tabelle bereits mit Daten gefüllt? Wenn ja kann es daran liegen, das TDBF die Daten als Dbase ansieht und die Umlaute im Dos Modus übersetzt.
In diesem Fall bei TDBF die Einstellung für Fox oder Windows Umlaute nehmen, das sollte gehen so wie ich mich erinnere.
Hausi
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Umlaute bei TDBF
Oder besser gleich umsteigen auf die ZEOS Komponente und SQLite verwenden. Das klappt sehr gut.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Lazarusforum e. V.
- Beiträge: 280
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Re: Umlaute bei TDBF
jepp, das sind Tabellen, die aus einem meiner Foxpro-Projekte kommen.
TableLevel steht auf 25
ich bin auf der Suche nach einer Alternative zu Foxpro und dabei ist mir Lazarus in die Finger gekommen.
Damals während meiner Ausbildung habe ich mit Turbo-Pascal angefangen, zwischendurch mal ein kleineres Projekt in Delphi...
Jetzt möchte ich gerne einzelne Projekte sanft migrieren. Also muß ich erstmal mit den bestehenden Tabellen leben, auch, wenn das ganze mal auf 'nen SQL-Server umgestellt wird.
TableLevel steht auf 25
ich bin auf der Suche nach einer Alternative zu Foxpro und dabei ist mir Lazarus in die Finger gekommen.
Damals während meiner Ausbildung habe ich mit Turbo-Pascal angefangen, zwischendurch mal ein kleineres Projekt in Delphi...
Jetzt möchte ich gerne einzelne Projekte sanft migrieren. Also muß ich erstmal mit den bestehenden Tabellen leben, auch, wenn das ganze mal auf 'nen SQL-Server umgestellt wird.
just my two Beer
-
- Lazarusforum e. V.
- Beiträge: 280
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Re: Umlaute bei TDBF
Erstmal bin ich an die dbf-Dateien gebunden. Und die scheinen von ZEOS nicht unterstützt zu werden.MmVisual hat geschrieben:Oder besser gleich umsteigen auf die ZEOS Komponente und SQLite verwenden. Das klappt sehr gut.
Dann steht eher Firebird/Postgre/MySQL auf dem Wunschzettel.
just my two Beer
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: Umlaute bei TDBF
Ja, die drei gehen mit der einen Zeos-Komponente. Zeos kann mit der "Protocol" Eingenschaft ganz leicht zwischen den Datenbanken umgeschaltet werden.
Ich nutze die in Verbindung mit SQLite, MySQL und PostgreSQL.
DBF Dateien werden nicht von Zeos unterstützt. Da müsste man einen Konverter basteln, der die Daten nach z.B. MySQL rüber schaufelt.
SQLite ist dennoch sehr interessant, da es dafür nur eine DLL benötigt und alle Daten in einer einzigen Datei aufbewahrt werden. Damit kann man sich gut Apps erstellen die auch nur auf einem USB Stick laufen ohne extra Installation auf fremden Rechnern.
Ich nutze die in Verbindung mit SQLite, MySQL und PostgreSQL.
DBF Dateien werden nicht von Zeos unterstützt. Da müsste man einen Konverter basteln, der die Daten nach z.B. MySQL rüber schaufelt.
SQLite ist dennoch sehr interessant, da es dafür nur eine DLL benötigt und alle Daten in einer einzigen Datei aufbewahrt werden. Damit kann man sich gut Apps erstellen die auch nur auf einem USB Stick laufen ohne extra Installation auf fremden Rechnern.
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- Lazarusforum e. V.
- Beiträge: 280
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Re: Umlaute bei TDBF
Jepp, hast recht. Für portable Anwendungen ist SQLLite besser als jede Datenbank. Ich bekomme immer 'nen dicken Hals, wenn irgendeine Anwendung einen SQL-Server auf (m)einem System installiert und resident startet, nur um ein paar Telefonnummern abzulegen.MmVisual hat geschrieben:SQLite ist dennoch sehr interessant, da es dafür nur eine DLL benötigt und alle Daten in einer einzigen Datei aufbewahrt werden. Damit kann man sich gut Apps erstellen die auch nur auf einem USB Stick laufen ohne extra Installation auf fremden Rechnern.
Aber Back2Topic: hat irgendwer eine Lösung zum Umlautproblem?
Ich havs auch mal per ODBC versucht: das gleiche Problem.
just my two Beer
Re: Umlaute bei TDBF
Ich habe TDbf mal kurz angetestet. Das Umlautproblem liegt wohl daran, dass Lazarus UTF8 verwendet.
Im Feldeditor bei den relevanten Feldern im Event OnGettext die Umwandlung vornehmen. Dann stimmen die Umlaurte wieder.
z.B.
procedure TForm1.Dbf1ANREDEGetText(Sender: TField; var aText: string;
DisplayText: Boolean);
begin
aText:=SysToUTF8(Sender.AsString);
end;
hde
Im Feldeditor bei den relevanten Feldern im Event OnGettext die Umwandlung vornehmen. Dann stimmen die Umlaurte wieder.
z.B.
procedure TForm1.Dbf1ANREDEGetText(Sender: TField; var aText: string;
DisplayText: Boolean);
begin
aText:=SysToUTF8(Sender.AsString);
end;
hde
Re: Umlaute bei TDBF
utf8encode/utf8decode hört sich gut an.
Wenn du die Felder selbst füllst schreibst du utf8encode(xxx) bzw. utf8decode(xxx).
Wenn du mit dem Navigator usw. arbeitest, weiß ich es nicht.
Wenn du die Felder selbst füllst schreibst du utf8encode(xxx) bzw. utf8decode(xxx).
Wenn du mit dem Navigator usw. arbeitest, weiß ich es nicht.
-
- Lazarusforum e. V.
- Beiträge: 280
- Registriert: Sa 26. Mai 2012, 17:31
- OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
- CPU-Target: 64Bit
Re: Umlaute bei TDBF
Heureka!
> GetText() / SysToUTF8()
> SetText() / UTF8ToSys()
laufen...
vielleicht wichtig für alle, die danach suchen:
erst auf das TDbf-Objekt gehen, dort die Felder hinzufügen und dann in den Feldern (TStringField) die Ereignisse hinzufügen.
Danke sagt Jochen
> GetText() / SysToUTF8()
> SetText() / UTF8ToSys()
laufen...
vielleicht wichtig für alle, die danach suchen:
erst auf das TDbf-Objekt gehen, dort die Felder hinzufügen und dann in den Feldern (TStringField) die Ereignisse hinzufügen.
Danke sagt Jochen
just my two Beer
-
- Beiträge: 93
- Registriert: Di 17. Apr 2012, 22:41
Re: Umlaute bei TDBF
Hallo alle zusammen, bin hier gerade so darüber gestolpert...
Leider funktionieren via Smartphone die Zitate nicht wirklich, daher halte ich's mal allgemein.
Nun lese ich hier in diversen threads, das ihr die Datenbanken+Engine immer so klein, wie möglich halten möchtet. Habt ihr schon mal was vom embedded driver gehört? Soll heißen ihr könntet MySQL und Firebird auch nur über eine einzige dll ansprechen. PostgreSQL unterstützt dies leider noch nicht.
Die Zeos Komponente unterstützt diese variante über die Protokolle mysql-_d und firebird-__d für direct. Hier müßt ihr zwar einige Properties in der TZConnection mehr setzen, welche sonst bei der Installation des Servers geschrieben werden. Die Details findet ihr in den Docs zu den Servern.
Sogar MsSQL bieter schon die embedded versionen. Klein, schlank, eine dll+datenbank+applikation.
Michael
Leider funktionieren via Smartphone die Zitate nicht wirklich, daher halte ich's mal allgemein.
Nun lese ich hier in diversen threads, das ihr die Datenbanken+Engine immer so klein, wie möglich halten möchtet. Habt ihr schon mal was vom embedded driver gehört? Soll heißen ihr könntet MySQL und Firebird auch nur über eine einzige dll ansprechen. PostgreSQL unterstützt dies leider noch nicht.
Die Zeos Komponente unterstützt diese variante über die Protokolle mysql-_d und firebird-__d für direct. Hier müßt ihr zwar einige Properties in der TZConnection mehr setzen, welche sonst bei der Installation des Servers geschrieben werden. Die Details findet ihr in den Docs zu den Servern.
Sogar MsSQL bieter schon die embedded versionen. Klein, schlank, eine dll+datenbank+applikation.
Michael
ZeosDevTeam
Re: Umlaute bei TDBF
Ok, der Thread ist zwar schon etwas angestaubt, aber in bin heute auch über genau dieses Problem gestölpert.
Ich muß ein paar alte DBF (CP850) importieren um sie dann in eine SQL Datenbank (UTF-8) zu schieben inkl. Preview der Daten (ebenfalls UTF-8, weil Lazarus).
In TDbf ist das offenbar irgendwie vorgesehen (siehe DbfGlobals.DefaultOpenCodePage) hat bei mir aber nicht funktioniert.führt lediglich dazu, dass irgendwo im TDbf-Code
gesetzt wird. Man muss sich da wohl irgendwie eigene Übersetzungstabellen einhängen...?.
Ferner hätte das (wenn ich den Code richtig verstanden habe) auch nur Auswirkungen auf die Memofelder gehabt.
Bei den normalen Textfelder habe ich zumindestens keine entsprechenden Translate-Aufrufe gesehen.
However, da ich für meinen Fall nur CP850 -> UTF-8 brauche, habe ich den Code kurzerhand Q&D gepatched und damit mein Problem gelöst.
Ich muß ein paar alte DBF (CP850) importieren um sie dann in eine SQL Datenbank (UTF-8) zu schieben inkl. Preview der Daten (ebenfalls UTF-8, weil Lazarus).
In TDbf ist das offenbar irgendwie vorgesehen (siehe DbfGlobals.DefaultOpenCodePage) hat bei mir aber nicht funktioniert.
Code: Alles auswählen
DbfGlobals.DefaultOpenCodePage:=850;
Code: Alles auswählen
TranslationMode=tmNoneAvailable
Ferner hätte das (wenn ich den Code richtig verstanden habe) auch nur Auswirkungen auf die Memofelder gehabt.
Bei den normalen Textfelder habe ich zumindestens keine entsprechenden Translate-Aufrufe gesehen.
However, da ich für meinen Fall nur CP850 -> UTF-8 brauche, habe ich den Code kurzerhand Q&D gepatched und damit mein Problem gelöst.
Code: Alles auswählen
gbf_dbffile.pas -> TDbfFile.GetFieldDataFromDef()
dbf.pas -> TDbfBlobStream.Translate()
-> CP850ToUTF8(s);