![]() |
Datenbank: PostgreSQL • Version: 8.3 • Zugriff über: ZeosLib
Welcher Zeichensatz für neue DB (über Zeos) empfehlenswert?
Da wir momentan was PostgreSQL angeht noch recht grün hinter den Ohren sind, uns aber entschieden haben, es für kommende Projekte einzusetzen, stellt sich für mich gerade die Frage nach dem "richtigen" Zeichensatz für neue Datenbanken. Zugegriffen werden soll darauf mittels den Zeos-Komponenten (momentan) aus Delphi 7.
Standardmäßig ist bei PostgreSQL ja UTF8 als Zeichensatz für neue Datenbanken eingestellt (in diesem pgAdmin-Tool). Da UTF8 sowohl unter einem Windows- als auch Linux-Server zu Verfügung steht, wäre das erstmal die erste Wahl. Problem an der Geschichte ist nur die Client-Seite: Umlaute werden im Delphi-DBGrid falsch angezeigt. Auch wenn ich per INSERT-Befehl einen AnsiString, der Umlaute enthält, in eine UTF8-Datenbank einfügen will, kommt eine Fehlermeldung: Zitat:
Was also tun? 1. Gibt es irgend eine Möglichkeit, das DBGrid (oder DataSource oder Query oder Connection) irgendwie auf UTF8 umzustellen? 2. Ist UTF8 als Zeichensatz überhaupt empfehlenswert? Ich habe bei meinen bisherigen Tests auch den WIN1252-zeichensatz verwendet, weil ich damit die Probleme nicht habe. Allerdings steht der mir unter Linux nicht zu Verfügung, und wir haben auch Linux DB-Server im Einsatz. Vielen Dank für eure Hilfe :) ! |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
OK, löse hier mal selbst auf: das Zauberwort heißt Client-Encoding. Ich übermittle dem Postgres-Server nun nach dem verbinden, dass ich als Client-Encoding LATIN9 (= ISO-8859-15) verwenden will, und prompt passen die Umlaute im DBGrid wieder :) . Und auch bei INSERT-Befehlen beschwert er sich nun nicht mehr über fehlerhafte UTF-8-zeichen, weil er die Daten fortan auch in LATIN9 erwartet.
Delphi-Quellcode:
Für mich ein gangbarer Weg :-D
procedure TForm1.ZConnection1AfterConnect(Sender: TObject);
begin ZConnection1.ExecuteDirect('SET CLIENT_ENCODING TO ''LATIN9'';'); end; |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Kommt ZEOS nicht mit UTF8 zurecht so das es eine Transparente Codierung UTF8 <-> Unicode vornimmt :gruebel:
Für größere Apps würde ich eh die DB-Schnittstelle z.B. mit Bridge-Pattern kapseln und wenn möglich auf DB-Sensitive Controls verzichten. Damit kannst du die nötigen Wandlungsfunktionsaufrufe in einer Klasse/Unit kapseln/zentrieren. |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Zitat:
Zitat:
Eine gewisse Zentralisierung des Datenzugriffs ließe sich ja mittels Connection auf Datenmodul erreichen. Was spricht dagegen, bei den verschiedenen Formularen mit DB-Zugriff auf die TZQuery zurückzugreifen? |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Zu Eurer Datenbankwahl einige Hinweise:
Ich war auch überzeugt, dass Progress "die" Datenbank ist. Die Praxis hat mich jedoch eines besseren belehrt. 1) Ihr solltet euch mit dem Thema Datensicherung auseinandersetzen - Ihr werdet feststellen, dass diese bei Progress mit einem hohen Aufwand verbunden ist. 2) Auf welchem Betriebssystem läuft in Zukunft der Postgress-Server? a) Ich habe es unter Fedora aufgegeben mit Postgress zu arbeiten - beim Update müssen alter und neuer Sever parallel laufen b) Postgress wird derzeit intensiv gepflegt, was ja zunächst sehr positiv ist, aber es wird dadurch ein regelmäßiger Updateauf- wand verursacht - wenn dann auch noch das Betriebssystem laufend hochgezogen wird, dann geht das einem selbst und auch dem Kunden ganz schön auf die Nerven - es genügt eine einzige Fehlentscheidung und man hat richtig Stress(z.B. hochziehen des Betriebssystem, ohne vorher einen Dump der DB gezogen zu haben) 3) Einfach die DB zu wechseln ist Theorie. - Postgress hat eine andere Schreibsyntax wie Firebird. 4) Zeos ist nicht frei von Problemen - lies einfach mal im ZEOS-Forum mit 5) Heute ein neues Projekt mit D7 aufzusetzen ist auch nicht unproblematisch - siehe die UTF8-Geschichte Gruß Alfred |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Zitat:
Zitat:
|
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Also dass die richtige und für das DBMS passende SQL-Syntax intern nur an einer Stelle zusammengestellt wird? Bei simplen SQL-Statements der Form "SELECT spalte FROM table WHERE column = value;" mag das ja noch gut machbar sein, aber wenn die Statements mal richtig komplex werden? Man kann ja nicht für jede Eventualität eine Schnittstellen-Funktion schreiben? Was würdest du da vorschlagen? Wie gesagt, den Sinn davon sehe ich ein.
function Select(const Select, From, Where: string): ResultSet;
|
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Der Professor meine Bruders hat einmal folgendes gesagt:
Zitat:
Zitat:
![]() Gruß Alfred |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Zitat:
Zitat:
|
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
@Infect:
Es macht sinn den Datenbankzugriff in einer Klasse oder mehreren zu Kapseln, die sich beim wechsel zu einer anderen Datenbank leicht mit neuen SQLs füllen lassen. Das Problem ist das verschiedene SQL Server verschiedene SQL-Sytnaxen haben (man nehme nur mal das TimeStamp Format nach 2003 Standard). Du kapselst nicht nach Insert, Update, Delete...sondern nach Service Kriterien. Eine Funktional in sich geschlossene Aufgabe.
Delphi-Quellcode:
Sowas in der Art.
Function TKunde_Persistent.Anlegen(Name, Vorname, Adresse, Kategorie:String):boolean;
Function TKunde_Persistent.Suchen(FilterName, FilterVorname, FilterAdresse, FilterKategorie:String; aKunde : TKunde_View):boolean Der Vorteil ist das du all die Probleme die wir zum Beispiel gerade haben (Datenbankumstellung läuft seit 3 Jahren) vermeidest. Es schadet natürlich nicht, noch eine Bridge Pattern ebene und eine Facade Pattern Ebene dahinter aufzuziehen, um jeder zeit auch von Zeos los kommen zu können. |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
@QuickAndDirty: Ich kann mir ehrlich gesagt schwer vorstellen, dass eine so aufgebaute Schnittstelle zwischen Anwendung und Datenbank wirklich so das gelbe vom Ei ist. Klar wäre man dann Anwendungsseitig völlig losgelöst von der Datenquelle darunter. Theoretisch könnten die Daten dann z.B. sogar in XML-Dateien liegen, die in der "Suchen"-Funktion nur ausgeparsed werden. An sich ne feine Sache.
Aber ist das nicht mit erheblichem Anpassungsauswand verbunden, wenn man z.B. in Zukunft noch nach allen möglichen anderen Kriterien nach Kunden suchen möchte, als nur Vor-/Nachname oder Adresse? Du müsstest dann entweder deine Schnittstelle immer anpassen - sprich Parameter-Leiste erweitern - und damit auch alle aufrufenden Methoden, oder deine bestehende Suchen-Funktion ständig überschreiben. Dadurch würde das mit der Zeit immer unübersichtlicher werden. Dann hättest du irgendwann 5 verschiedene Suchfunktionen, die alle eigentlich dasselbe machen, nur jede ein bisschen anders. Genauso, wenn du die Ergebnisse nach allen möglichen Kriterien auf- oder absteigend sortiert haben möchtest. Wie kriegt man sowas in den Griff? |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Eigentlich dachte ich daran ALLE Attribute des Kunden zu verwenden...nur hatte ich nicht so viel Zeit mir welche auszudenken...neben der Arbeit...Die Methoden müssen eben alle Parameter die du dir wünscht enthalten...
Und Gerade die Teilung in Persistenz(Modell) und GUI(View) Objekte macht Anpassungen leicht... Und das Änderungen an der Datenbankstruktur irgendwie immer Aufwand nach sich ziehen (Setup, Update, Persistenz, GUI) ist bei Relationalen Datenbanken sowie so immer gegeben... (Wirklich unproblematisch sind Änderungen am Datenmodell dann nur wenn man a la J2EE Obejct relationale Persistenz Funktionen implementiert...auf Kosten der Geschwindigkeit!) Du musst das ja so nicht machen, aber ich habe nur schlechte Erfahrungen mit Gui-Datenobjekten die überall in *.dfm 's und Code Verteilten Daten-Zusammenhänge. Es ist nicht so leicht das alles umzuarbeiten, die TTales und TQuerys liegen alle auf Formularen... Mal wird hier ein Insert gemacht mal dort ein anderer.... wenigstens unsere filterkomponente funktioniert Zentral... 700K Code Zeilen und Hunderte BDE-Objekte und teilweise mehrfach verschiedenen Vorgehensweisen je nach Datenbank(Paradox,Orakel,MSSQL, DBISAM(ohne BDE)... Jetzt wird es Stück für Stück eben Richtig gemacht und die Datenbankzugriffe auf eine Facade umgeleitet, wenn das durch ist, werden GUI und Persistenz getrennt, die Logik ist bereits weitest gehend gekapselt damit die WEB Lösung der Anwendung möglich ist. |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Wie gesagt, die Hintergründe für deinen Ansatz leuchten mir schon ein. Aber schränkt ihr euch selbst damit nicht unheimlich ein? Da hat man ein so mächtiges Werkzeug wie SQL, kann es aber nicht richtig nutzen, weil die Schnittstelle nach außen kein SQL mehr unterstützt, sondern nur noch diese ziemlich kastrierte "Suchen"-Funktion z.B. Oder wie würdest du das realisieren, wenn ich jetzt innerhalb der Kundentabelle z.B. alle männlichen Kunden suchen will, deren Geburtsdatum zwischen 1960 und 1970 liegt, und alle weiblichen, deren Geburtsdatum zwischen 1970 und 1980 liegt? Wobei das ja noch eine ziemlich lächerliche Abfrage wäre, in der Praxis schaut das ja meist noch viel viel haariger aus. Das kannst du doch gar nicht so weit abstrahieren, um alle denkbaren und auch sinnvollen Möglichkeiten abzudecken :gruebel: . Oder schlägst du tatsächlich vor, für jede Abfrage eine eigene Funktion zu implementieren???
EDIT: Und was ist, wenn irgendwann, wenn die Schnittstelle mal fertig ist und überall so eingebaut wurde, neue Suchkriterien hinzukommen, weil einfach die Anforderung dazu besteht? Wird dann jeweils eine neue Such-Funktion geschrieben, die eben die neuen Kriterien abdeckt oder wird gar die bestehende Suchfunktion angepasst und damit die ZIG Stellen, an denen sie mit den "alten" Parametern aufgerufen wurde? Ersterer Fall würde einen unheimlichen Wildwuchs an Funktionen erzeugen, die alle irgendwie dasselbe machen, in dem man irgendwann die Übersicht verliert. Letzterer Fall würde bewirken, dass sich die Schnittstelle ständig ändern würde und damit alle aufrufenden Funktionen gleich mit. Beides möchte ICH zumindest nicht verantworten müssen... |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Bei uns sind immer alle Eigenschaften suchbar.
Es gibt alle Eigenschaften 3 mal in dem SuchObjekt Einmal als VON einmal als BIS und einmal als GLEICH Eigenschaften. zusätzlich ist für Poweruser ein direkter SQL_zugriff Möglich. der zuletzt angewendete Filter wird für die User gespeichert und beim erneuten anschauen der Maske automatisch ausgeführt. Die Such Maske sieht auch Identisch aus wie die jeweilige Stammdatenmaske, nur das es sie eben auf 3 Tabsheets (VON,BIS,GLEICH) gibt. Und die Eine Funktion überall zu finden ist kein Probelm. Nur wird sie ja nicht überall benutzt. Sondern im Kontext eines Services umgesetzt. Wenn du natürlich eine Freie-Daten-Recherche ermöglichen willst ist der vorhin aufgezeigte weg nicht sehr optimal... Eine frei Datenrecherche bräuchte einen direkten SQL Zugriff oder in einem Decisioncube aufbereitete Daten...UND Poweruser die Ahnung haben. Allerdings haben wir kaum derartige Power User in unserem Kundenkreis, und für Sonderwünsche außerhalb des Standard Produkts existieren Anpassbare Oberflächen und ein Makrointerpreter(c-Interpreter). Grundsätzlich ist eine MVC Trennung und eine SOA Orientierung für Anwendungssoftware aus meiner Sicht recht erstrebenswert um die Wartbarkeit zu erhöhen. Der vorhin aufgezeigte Weg ist dabei ein Kompromiss zwischen einfacher Veränderbarkeit (Objektrelationales-Persistenz-Framework) und hoher Performance(Große Teile der Programmlogik in Stored-Procedures), der die Datenbank und Oberflächen-Unabhängigkeit der Geschäftslogik gewährleistet. |
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Mann kann die DB-Neutrale Schnittstelle soweit aufbohren das auch SQL-Joins oder TOP/LIMIT in generischer Art unterstützt wird bzw. Aggregatfunktionen. Ist halt Aufwändiger.
|
Re: Welcher Zeichensatz für neue DB (über Zeos) empfehlenswe
Zitat:
Delphi-Quellcode:
Um auch das ResultSet plattformneutral zu halten, sprich, die Zeos-Query nach außen hin zu "verdecken", würde sich da ein TClientDataset für anbieten? Also die Datenmenge einer Query in ein ClientDataset laden und das dann als Ergebnis zurück zu geben?
function Select(const Select, From, Where: string): ResultSet;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz