Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Umlaute // Lazarus 1.4.2 mit Datenbank (https://www.delphipraxis.net/186609-umlaute-lazarus-1-4-2-mit-datenbank.html)

manfred_h 1. Okt 2015 15:11

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Hallo zusammen

Wollte Euch nur ein kleines Update über den Stand der Dinge geben:
Leider bis jetzt noch keinen Erfolg. Der Support hat aber ein Problem im FPC gefunden:
Zitat:

As I said earlier, there is a problem in FPC itself.
Delphi-Quellcode:
procedure TDataSet.DataConvert(aField: TField; aSource, aDest: Pointer;
  aToNative: Boolean);

 // There seems to be no WStrCopy defined, this is a copy of
 // the generic StrCopy function, adapted for WideChar.
 Function WStrCopy(Dest, Source:PWideChar): PWideChar;
 var
   counter : SizeInt;
 Begin
   counter := 0;
   while Source[counter] <> #0 do
   begin
     [B]Dest[counter] := char(Source[counter]); //<<< here should be WideChar instead of char , so it loses all unicode chars[/B]
     Inc(counter);
   end;
   { terminate the string }
   Dest[counter] := #0;
   WStrCopy := Dest;
 end;
Hier gehts im Support Forum weiter:
http://talk.remobjects.com/t/german-...azarus/6041/29

Shalom
Manfred

IBExpert 1. Okt 2015 17:44

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es wird aber auch durch mehrfache Wiederholung von denen nicht richtiger, das die denken, das da Fehler in Lazarus sind. Wahrscheinlich ist da ein Fehler in der zusammenarbeit zwischen deren Komponenten und der Lazarus Funktionsweise, aber das ist dann ganz wo anders zu beheben als irgendwo an den fpc sourcen was zu patchen. Wäre jedenfalls meine Sicht der Dinge.

Siehe Anhang: ist enfach mal UTF8 Inhalt von http://www.columbia.edu/~kermit/utf8.html
in unser ERP System eingefügt und das wird sowohl in BRP (geschrieben mit Lazarus) als auch in IBExpert (geschrieben mit Delphi) korrekt dargestellt.

manfred_h 2. Okt 2015 22:03

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Hier das neueste Update:

Sieht im Moment nicht so gut aus...:pale:

Zitat:

the main difference between Delphi and Lazarus: Delphi uses UTF16 for unicode support in comparing Lazarus that uses UFT8 ...
RO/DA use UTF16 for unicode support because it other our platforms (.NET/Cocoa/etc) also use UTF16.

as a workaround, you can use my suggestion from previous post and manually convert UTF16 into UTF8
another solution is convert UTF16 to UTF8 by request in OnGetText event
Delphi-Quellcode:
procedure TForm1.tbl_test31144_utf8WSTRGetText(Sender: TDACustomField;
  var Text: string; DisplayText: boolean);
begin
  if Sender.DataType = datWideString then Text := UTF8Encode(Sender.asWideString);
end;
Zitat:

in this case, data in grid will be shown correctly, but it will require fix in TDataSet.DataConvert, also manual encoding will be required if you wanted to use UTF16 string in lazarus controls like edit/memo

Bernhard Geyer 2. Okt 2015 23:01

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Zitat:

Zitat von manfred_h (Beitrag 1317552)
Hier das neueste Update:

Sieht im Moment nicht so gut aus...:pale:

Zitat:

the main difference between Delphi and Lazarus: Delphi uses UTF16 for unicode support in comparing Lazarus that uses UFT8 ...
RO/DA use UTF16 for unicode support because it other our platforms (.NET/Cocoa/etc) also use UTF16.

as a workaround, you can use my suggestion from previous post and manually convert UTF16 into UTF8
another solution is convert UTF16 to UTF8 by request in OnGetText event
Delphi-Quellcode:
procedure TForm1.tbl_test31144_utf8WSTRGetText(Sender: TDACustomField;
  var Text: string; DisplayText: boolean);
begin
  if Sender.DataType = datWideString then Text := UTF8Encode(Sender.asWideString);
end;
Zitat:

in this case, data in grid will be shown correctly, but it will require fix in TDataSet.DataConvert, also manual encoding will be required if you wanted to use UTF16 string in lazarus controls like edit/memo

Lazarus geht mit ihren UTF8-Weg schon ziemlich einen ungewöhnlichen Weg. Viele Systeme (.NET/Java/Windows/Delphi) gehen den UTF-16 Weg.
Trotzdem sollte eine Bibliothek die man (kostenpflichtig? Kauft) schon alle Eigenheiten des Unterstützen System berücksichtigen und nicht sagen: "Wir machen es in allen Systemen anders, also passt ihr euch an".

IBExpert 3. Okt 2015 08:59

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1317554)
Lazarus geht mit ihren UTF8-Weg schon ziemlich einen ungewöhnlichen Weg. Viele Systeme (.NET/Java/Windows/Delphi) gehen den UTF-16 Weg.

Einspruch: https://en.wikipedia.org/wiki/UTF-8
"UTF-8 is the dominant character encoding for the World Wide Web, accounting for 85.1% of all Web pages in September 2015"
UTF16 ist durch Windows weit verbreitet, wer sich aber mal eine typische Textdatei im Hex Editor anschaut, sieht sofort die Nachteile von UTF16, denn wie der Name schon beeinhaltet, ist für jedes Zeichen immer mindestens 2 Byte Platz erforderlich, auch wenn da nur Ascii Zeichen wie A-Z und 0-9 drin stehen. Das betrifft im westeuropäischen Sprachraum sicherlich den Großteil aller Daten. Die Dateien sind daher bei gleichem Inhalt fast doppelt so groß. Und für den restlichen Bereich (Asien etc) sind die meisten Zeichen 4 Byte lang. Daher ist UTF8 im Sinne von Übertragung und Speicherung meistens ökonomischer. Das ist zwar eigentlich Haarspalterei, aber UTF8 ist keineswegs ungewöhnlich.

Zitat:

Zitat von Bernhard Geyer (Beitrag 1317554)
Trotzdem sollte eine Bibliothek die man (kostenpflichtig? Kauft) schon alle Eigenheiten des Unterstützen System berücksichtigen und nicht sagen: "Wir machen es in allen Systemen anders, also passt ihr euch an".

Ich frag mich sogar noch mehr, ob die das überhaupt umfassend testen. Den Vorschlag, das dann im GetText zu konvertieren, halte ich für eine komplette Bankrotterklärung. Man sollte nicht vergessen, das Komponenten wie die in Lazarus eingebauten SQL DB Komponenten es auf jeder Plattform (windows, Linux, Mac usw) hinkriegen, ohne manuelles GetText das richtige Zeichen auf den Bildschirm zu bekommen.

Wenn man also als Komponentenhersteller die Komponenten aus reinem Opportunismus auf dieser Plattform "benutzbar" macht, in dem es sich kompilieren lässt und für einige der unterstützten Plattformen bzw Charsets auch benutzen lässt, dann sollten die den potentitellen Käufer doch drauf hinweisen. Wenn manfred_h der erste ist, der das gemerkt hat und man erst Tage später nach intensiven Nachhaken eine unbefriedigende Erklärung dazu geben kann, ist das im Sinne einer Produkthaftung sicherlich Grund genug, das Geld zurückfordern zu können. Ich gehe nämich auch davon aus, das beim Schreiben SetText ebenso behandelt werden müsste und spätestens jetzt macht die Komponente mehr Arbeit als man dadurch einspart, im Vergleich zu den eingebauten SQL DB Komponenten.

Bernhard Geyer 3. Okt 2015 09:28

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Zitat:

Zitat von IBExpert (Beitrag 1317562)
Zitat:

Zitat von Bernhard Geyer (Beitrag 1317554)
Lazarus geht mit ihren UTF8-Weg schon ziemlich einen ungewöhnlichen Weg. Viele Systeme (.NET/Java/Windows/Delphi) gehen den UTF-16 Weg.

Einspruch: https://en.wikipedia.org/wiki/UTF-8
"UTF-8 is the dominant character encoding for the World Wide Web, accounting for 85.1% of all Web pages in September 2015"
UTF16 ist durch Windows weit verbreitet, wer sich aber mal eine typische Textdatei im Hex Editor anschaut, sieht sofort die Nachteile von UTF16, denn wie der Name schon beeinhaltet, ist für jedes Zeichen immer mindestens 2 Byte Platz erforderlich, auch wenn da nur Ascii Zeichen wie A-Z und 0-9 drin stehen. Das betrifft im westeuropäischen Sprachraum sicherlich den Großteil aller Daten. Die Dateien sind daher bei gleichem Inhalt fast doppelt so groß. Und für den restlichen Bereich (Asien etc) sind die meisten Zeichen 4 Byte lang. Daher ist UTF8 im Sinne von Übertragung und Speicherung meistens ökonomischer. Das ist zwar eigentlich Haarspalterei, aber UTF8 ist keineswegs ungewöhnlich.

Mir ging es mit ungewöhnlich um den Faktor Frameworks/OS. Das UTF8 beim Speichern oder im web (Kein Webseite läuft auf UTF16 sondern primär auf UTF8).
AFAIK hat aber auch OSX UTF16 als die primäre/bevorzugte Codierung und auch Android (wegen starker Java-Wurzeln) wird UTF16 haben.
Und dann ist es von vorteil wenn auch die eigene Sprache UTF16 verwendet damit bei jedem API aufruf gewandelt werden muss. Vor einiger Zeit habe ich Lazarus getestet und dort war es nicht möglich (oder nur sehr umständlich) alle File-Funktionen mit Dateien mit Sonderzeichen zu nutzen.

Bernhard Geyer 3. Okt 2015 10:57

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Zitat:

Zitat von IBExpert (Beitrag 1317562)
Ich frag mich sogar noch mehr, ob die das überhaupt umfassend testen. Den Vorschlag, das dann im GetText zu konvertieren, halte ich für eine komplette Bankrotterklärung. Man sollte nicht vergessen, das Komponenten wie die in Lazarus eingebauten SQL DB Komponenten es auf jeder Plattform (windows, Linux, Mac usw) hinkriegen, ohne manuelles GetText das richtige Zeichen auf den Bildschirm zu bekommen.

Wenn man also als Komponentenhersteller die Komponenten aus reinem Opportunismus auf dieser Plattform "benutzbar" macht, in dem es sich kompilieren lässt und für einige der unterstützten Plattformen bzw Charsets auch benutzen lässt, dann sollten die den potentitellen Käufer doch drauf hinweisen. Wenn manfred_h der erste ist, der das gemerkt hat und man erst Tage später nach intensiven Nachhaken eine unbefriedigende Erklärung dazu geben kann, ist das im Sinne einer Produkthaftung sicherlich Grund genug, das Geld zurückfordern zu können. Ich gehe nämich auch davon aus, das beim Schreiben SetText ebenso behandelt werden müsste und spätestens jetzt macht die Komponente mehr Arbeit als man dadurch einspart, im Vergleich zu den eingebauten SQL DB Komponenten.

Diese Methode andere Codierung einer Komponente beizubringen die es nicht kann habe ich so 2002 gemacht als wir unser D6 Programm Unicode bei gebracht haben.
In 2015 sehe ich das als Krücke an. Empfiehlt der Komponentenhersteller das, wäre das für mich ein Argument nach Alternativen zu suchen.

manfred_h 4. Okt 2015 17:24

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Danke für Eure Antworten.

Für mich war RemObjects eine gute Idee, weil ich eine Komponente suchte, mit der ich eine Verbindung auf einen zentralen MySQL Server realisieren kann, ohne dass dieser direkt ansprechbar ist.
RemObject hat für dies eine html Schnittstelle, die dies übernimmt. Die Benutzerverwaltung konnte auch schön mit einem LDAP-Server realisiert werden.

Momentan bin ich mir nicht sicher, wie ich weitergehen soll...
Lazarus habe ich ausgesucht, da dies sehr ähnlich wie Delphi ist. Von Delphi wollte ich aus Kostengründen "weg". Nichts generell gegen Delphi. :wink:
Habe mich auch schon ( die letzten Tage ) mit dem Gedanken beschäftigt, ob Visual Studio eine Option wäre....
Lazarus hat mich auch begeistert, da ich eine Codebasis für Windows / OS X / Linux hatte.

Shalom
Manfred

PS: Der Support von RemObject war immer sehr gut Erreichbar und hat eigentlich immer gute Lösungsvorschläge unterbreitet. Wollte dies nur kommunizieren, da ich kein schlechtes Licht auf den Support werfen möchte. Das aktuelle Problem ist aber trotzdem sehr ärgerlich...

IBExpert 4. Okt 2015 22:34

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Zitat:

Zitat von manfred_h (Beitrag 1317646)
Für mich war RemObjects eine gute Idee, weil ich eine Komponente suchte, mit der ich eine Verbindung auf einen zentralen MySQL Server realisieren kann, ohne dass dieser direkt ansprechbar ist.

Dafür benutzen wir in einem sehr großen Projekt sehr gerne SSH (auf windows mit putty bzw plink) und bauen damit von verbundenen clients aus einen Reverse Tunnel auf. Ohne SSH Key kommt dann eh keine auf die Kiste, der Traffic ist verschlüsselt und komprimiert und über den gleichen Kanal kannst du parallel auch neben deiner DB auch noch ftp,rdp oder sonstwas drauf binden. Aus der Sicht deiner client app kannst du alles machen, was sonst auch per tcp auf der Remotemaschine geht. Ist eine ähnliche Technik mit der auch Teamviewer bzw pcvisit verbindungen aufbaut, wenn man das über ein gateway server macht, dann braucht außer der keiner der anderen beteiligten System eine nach außen erreichbaren offenen Port.

Ergänzend nutzen wir in anderen Projekten einen 30 Zeiler in php, mit dem wir dann (in dem Falle aber mit Firebird) via http bzw https request sql abfragen an einen apache webserver senden und der uns dann die resultate in einem csv format zurücksendet (Der Rest ist in einer Firebird SP realisiert).

Leider ist in deiner Aussage aber schon das größte Problem vieler Delphi Programmierer enthalten: man sucht nach einer Komponente!

Die macht dann oft ganz viele tolle Dinge, aber das eigentliche Problem wäre oft ohne Komponente viel einfacher umzusetzen. Remobjects gehört sicherlich neben devexpress und tms zu den besten Herstellern, die noch im Delphi Markt existieren, aber man sollte immer die Alternative Do it yourself im Auge behalten, ist oft weniger schwierig als man denkt.

manfred_h 21. Okt 2015 09:08

AW: Umlaute // Lazarus 1.4.2 mit Datenbank
 
Hallo zusammen
Gute neuigkeiten von remobjects:thumb:. Das ganze wurde als Bug eingestuft wird behoben.
Zitat:

Thanks, logged as bugs://73397
bugs://73397 got closed with status fixed.
it will be in next beta (in a week)
Shalom
Manfred


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Seite 3 von 4     123 4      

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