Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi enums in Datanbank schreiben und wieder lesen (https://www.delphipraxis.net/214572-enums-datanbank-schreiben-und-wieder-lesen.html)

bernhard_LA 1. Feb 2024 16:26

Datenbank: MSSQL • Version: 12 • Zugriff über: ADO

enums in Datanbank schreiben und wieder lesen
 
Was ist eigentlich die beste Option enumerations wie TTrafficLight= (red,yellow,green, unknown, notinservice);
in einer MSSQL Datenbank Tabelle abzulegen?
Mir fällt nur ein als Integer oder String, gibt es hier eine elegantere Lösung ?

DieDolly 1. Feb 2024 16:28

AW: enums in Datanbank schreiben und wieder lesen
 
Ich speichere zwar nicht in eine Datenbank, aber in eine lokale Datei, die Namen der Enums als String. Die lese ich auch so wieder aus.

Der schöne Günther 1. Feb 2024 16:37

AW: enums in Datanbank schreiben und wieder lesen
 
Du willst das in guter, normalisierter Form, als separate Tabelle anlegen und mittels Fremdschlüssel auf diese Tabelle verweisen.

Mit den entsprechenden Constraints in deiner Datenbank kannst du somit sicherstellen, dass jeder Eintrag einen gültigen Enum-Wert hat und Änderungen am Enum auch entsprechend möglich sind indem nur die Tabelle erweitert wird statt ein Skript über den gesamten Datenbestand jagen zu müssen.

himitsu 1. Feb 2024 17:18

AW: enums in Datanbank schreiben und wieder lesen
 
* klein und schnell
Delphi-Quellcode:
Feld.AsInteger := Ord(deineEnumvariable)
als Integer oder SMALLINT in die DB
und zurück via
Delphi-Quellcode:
TDeiEnumTyp(Feld.AsInteger)

Aber da darf man den Enum niemals "inhaltlich" verändern (maximal etwas hinten anhängen)

* Da MySQL auch ENUM kennt, ist natürlich der Weg, den Enum in Delphi als String zu haben, ganz praktisch.

* Alternativ eine "freie" Übersetzung von Delphi-Enum zu DB-Enum (oder DB-String) basteln/zusammenstellen.
Kennt ihr z.B. vom Boolean oder gewissen Enums im Objektinspektor.



Delphi-Referenz durchsuchenGetEnumName und Delphi-Referenz durchsuchenGetEnumValue (eventuell mit einem Copy, ums Prefix loszuwerden, falls man nicht mit ScopedEnums arbeiten will)

Delphi-Referenz durchsuchenIdentToInt und Delphi-Referenz durchsuchenIntToIdent
IdentToColor und ColorToIdent bzw. ColorToString
BoolToStr und StrToBool


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:08 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