AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Mapping von NULL auf primitive Datentypen, wie genau?
Thema durchsuchen
Ansicht
Themen-Optionen

Mapping von NULL auf primitive Datentypen, wie genau?

Ein Thema von s.h.a.r.k · begonnen am 5. Mär 2010 · letzter Beitrag vom 5. Mär 2010
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Mapping von NULL auf primitive Datentypen, wie genau?

  Alt 5. Mär 2010, 03:03
Datenbank: egal • Version: egal • Zugriff über: egal :)
Hallo zusammen,

ich sitze gerade noch vor dem Rechner, weil ich ein Problem habe, welches ich auf die schnell nicht sinnvoll lösen kann. In meinem Fall ist es so, dass ich Daten aus Datenbank A laden und in Datenbank B speichern muss. Dies mache ich über mein Programm, da die Daten nocht nicht ganz reif für DB B sind.

Jedenfalls bin ich gerade an der Stelle, wo ich die Daten lade und diese auf Klassen mappe, was ja *eigentlich* kein Problem ist, bis auf diese dummen NULL-Werte eben. Bei Strings sehe ich da ja weniger das Problem, da ich dann einfach einen Leerstring habe, aber wie schaut das bei anderen Datentypen aus?
Code:
String -> '' (Leerstring)
Integer -> ?
Float  -> ?
Boolean -> ?
Oder gibt es da andere Möglichkeiten? Ich habe es bisher noch nicht geschafft ein NULL einem String zuzuweisen

Eine andere Möglichkeit wäre es ja, jede Eigenschaft einer Klasse als TValue (AnyDAC) oder TField (soweit ich weiß spuckt das ADO aus, wenn man ein Feld aus einem Dataset ausliest) angibt, aber dann erhöht sich zum einen der Aufwand bei der weiteren Programmierung und zum anderen ist das einfach ein Overkill (Speicher/Performance).
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Mapping von NULL auf primitive Datentypen, wie genau?

  Alt 5. Mär 2010, 07:40
Man könnte Variants verwenden. Bei den Integer/Float-Typen müsstest du sonst einen Wert opfern
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#3

Re: Mapping von NULL auf primitive Datentypen, wie genau?

  Alt 5. Mär 2010, 08:11
Bei den numerischen Werten hilft es ungemein zu wissen, welchen Wertebereich es gibt. Entsprechend wäre ein WErt ausserhalb des Wertebereichs als NULL anzusehen. Zur Not kannst Du halt sowas wie MAXINT als NULL verwenden.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#4

Re: Mapping von NULL auf primitive Datentypen, wie genau?

  Alt 5. Mär 2010, 08:25
Zitat von s.h.a.r.k:
Eine andere Möglichkeit wäre es ja, jede Eigenschaft einer Klasse als TValue (AnyDAC) oder TField (soweit ich weiß spuckt das ADO aus, wenn man ein Feld aus einem Dataset ausliest) angibt, aber dann erhöht sich zum einen der Aufwand bei der weiteren Programmierung und zum anderen ist das einfach ein Overkill (Speicher/Performance).
Ich habe Datenimports /-exports mit Datenobjekten programmiert die eigene Feldobjekte haben und auch mit simplen Objekten nur mit Feldern. Von der Geschwindigkeit macht das keinen merklichen Unterschied. Der Speicherbedarf ist etwa doppelt so groß, aber auf aktuellen Systemen spielt auch das keine Rolle. Der Programmieraufwand ist in etwa gleich. Zumindest muss man nicht rätseln ob mit -1 nun Null oder in diesem Feld tatsächlich -1 gemeint ist. Das ist besonders bei der nachträglichen Pflege der Software ein nicht zu unterschätzender Vorteil.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Mapping von NULL auf primitive Datentypen, wie genau?

  Alt 5. Mär 2010, 08:47
[quote="s.h.a.r.k"]Bei Strings sehe ich da ja weniger das Problem, da ich dann einfach einen Leerstring habe.../quote] Nein! Es ist ein Riesenunterschied, ob man keine Telefonnummer hat (Leerstring) oder sie noch nicht angegeben hat (NULL).

Verwende Variants und spezielle Routinen (VarToStr, VarToInt), um Null-Werte in den einzelnen Datentypen darzustellen. Und hier kann man ja den Leerstring und 0-Werte verwenden...

Aber nur für die Darstellung, sonst geht dir Information verloren (also nicht konvertieren).

So machen es übrigens auch die TField-Derivate: Die Eigenschaften 'AsString', 'AsInteger' usw. liefern für NULL keine Exception, sondern eben ein 'leer', also '', 0, 0.00 usw.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#6

Re: Mapping von NULL auf primitive Datentypen, wie genau?

  Alt 5. Mär 2010, 13:57
Danke für euer Feedback. Die Idee mit einem eigenen Datenobjekten gefällt mir an sich recht gut, obwohl es dann halt wieder darauf hinaus läuft, dass es ein Mehraufwand darstellt

Über Variants habe ich gelesen, dass diese eher langsam im Vergleich zu den primitiven Datentypen sind, daher wollte ich darauf bisher eher verzichten. Aber ich will halt auch nicht einen Wert aus dem Wertebereich opfern müssen. Den Leerstring als NULL anzusehen ist, wie schon richtig bemerkt, auch nicht Sinn der Sache.

Ich glaube aber, dass es auf Variants hinauslaufen wird, zumindest meiner ersten Einschätzung nach. Man muss somit nicht all zu viel anpassen, wenn man schon fertige Objekte etc. hat und kann diesen Typ halt leicht in andere Formate umwandeln.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:38 Uhr.
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