AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken FireDAC erkennt Boolean schreibt jedoch T/F anstelle von J/N
Thema durchsuchen
Ansicht
Themen-Optionen

FireDAC erkennt Boolean schreibt jedoch T/F anstelle von J/N

Ein Thema von Kostas · begonnen am 3. Nov 2014 · letzter Beitrag vom 5. Nov 2014
 
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
562 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: FireDAC erkennt Boolean schreibt jedoch T/F anstelle von J/N

  Alt 5. Nov 2014, 08:34
Eher einfach. J/N in einem CHAR(1) Feld ist kein Boolean. So einfach ist. Die Interpretation passiert in der Applikation und nicht auf der DB. Woher soll FireDAC wissen was ein Boolean sein soll, wenn es noch nicht mal die DB weiß. Damit ist 'die' Defintion nicht da.

Morden ist es Ja/Nein, Yes/No, YES/NO, y/n, j/n, J/Nein, */o usw... in sämtliche andere Sprachen ist es auch anders. Es gibt eben nicht nur Deutsch ....

Wenn man das soll will dann kann man getrost einen Trigger machen und T/F abfangen. (eine Notlösung).

Entweder man schlieft den Wert durch und kümmert sich um die Enumeration selber oder eben man bildet den Boolean als SmallInt auf der DB in der Domäne, denn FireDAC bildet True oder False an sich auf 0 oder 1 ab. Das ist eh schon die beste Annährung an die Realität in anderen DBs.

Die Notlösung das über DB-Komponenten zu schleifen im Falle von Firebird hilft mal nicht viel. Die ist einfach falsch. Es handelt sich um eine konkrete Interpretation einer Domäne in der DB als CHAR(1) mit 2 Werten auf der Anwendungsebene. M/W ist auch nicht boolean sondern ein Applikationsdomäne.

Wer eine Interpretationsschicht will braucht eine Interpretationsschicht. Das kann ein ORM sein, einfach Funktionen, ein Schema dazwischen, Bidnings oder eben Überbau unterhalb des Comp Layers.

Obwohl FireDAC im SQL als Macro eher flexibel ist, gefällt mir persönlich der Zugang über den Weg nur sehr bedingt. Das ist sehr nützlich, würde aber einen Basisdatentyp so nicht als Sonderfall behandeln wollen.



Ich glaube ehrlich gesagt dass ihr mit eurem Display-Kram auf der falschen Spur seid.
Wir speichern hier auch J/N in der Datenbank. Was dann dem User angezeigt wird ist nochmal eine ganz andere Geschichte.



Und die Helper Funktionen sollen sein damit sowas geht:

Feld.AsString := BoolToJN(x > 3);
statt
Delphi-Quellcode:
if x > 3 then
  Feld.AsString := 'J'
else
  Feld.AsString := 'N';
Es sei denn wir reden alle komplett aneinander vorbei :/
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 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