Umlaute bei TDBF

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Joh
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

Beitrag von Joh »

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
just my two Beer

hausi
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

Beitrag von hausi »

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

MmVisual
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

Beitrag von MmVisual »

Oder besser gleich umsteigen auf die ZEOS Komponente und SQLite verwenden. Das klappt sehr gut.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Joh
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

Beitrag von Joh »

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.
just my two Beer

Joh
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

Beitrag von Joh »

MmVisual hat geschrieben:Oder besser gleich umsteigen auf die ZEOS Komponente und SQLite verwenden. Das klappt sehr gut.
Erstmal bin ich an die dbf-Dateien gebunden. Und die scheinen von ZEOS nicht unterstützt zu werden.
Dann steht eher Firebird/Postgre/MySQL auf dem Wunschzettel.
just my two Beer

MmVisual
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

Beitrag von MmVisual »

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.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Joh
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

Beitrag von Joh »

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.
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.

Aber Back2Topic: hat irgendwer eine Lösung zum Umlautproblem?
Ich havs auch mal per ODBC versucht: das gleiche Problem.
just my two Beer

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: Umlaute bei TDBF

Beitrag von hde »

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

Epcop
Beiträge: 159
Registriert: Di 29. Mai 2012, 09:36

Re: Umlaute bei TDBF

Beitrag von Epcop »

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.

Joh
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

Beitrag von Joh »

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
just my two Beer

EgonHugeist
Beiträge: 93
Registriert: Di 17. Apr 2012, 22:41

Re: Umlaute bei TDBF

Beitrag von EgonHugeist »

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
ZeosDevTeam

joe
Beiträge: 37
Registriert: Fr 28. Mai 2010, 15:47

Re: Umlaute bei TDBF

Beitrag von joe »

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.

Code: Alles auswählen

DbfGlobals.DefaultOpenCodePage:=850;
führt lediglich dazu, dass irgendwo im TDbf-Code

Code: Alles auswählen

TranslationMode=tmNoneAvailable
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.

Code: Alles auswählen

gbf_dbffile.pas -> TDbfFile.GetFieldDataFromDef()
dbf.pas -> TDbfBlobStream.Translate()
-> CP850ToUTF8(s);

Antworten