AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Property's "stored" bug...

Ein Thema von BigAl · begonnen am 8. Mär 2021 · letzter Beitrag vom 8. Mär 2021
Antwort Antwort
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#1

Property's "stored" bug...

  Alt 8. Mär 2021, 10:51
Hallo zusammen,

ich habe eben einen Bug entdeckt. Ich gehe mal davon aus, dass es so ist, habe auf jeden Fall mal einen case dazu aufgemacht: RSP-33237

Folgendes Problem:

Properties von Komponenten (abgeleitet von TPersistent) welche mit "stored" prüfen ob die Eigenschaft gespeichert werden soll werden nicht gespeichert wenn entweder die stored-Funktion "False" zurück liefert (ist korrekt) oder Wert der Eigenschaft "0" ist (das ist falsch). Das ist natürlich fatal, da im Falle von "0" beim nächsten laden wieder der vorgegeben Wert in der Variable steht...

Also: aufpassen

Oder habe ich was übersehen?

Gruß
Alex
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 11:16
Das ist leider ein bisschen schäbig gelöst - das Kernproblem liegt in System.Classes.IsDefaultFloatProp - dort wird nämlich 0 immer als Standard betrachtet, auch wenn man explizit eine storedproc angegeben hat.
Allerdings kann man dort sehen, dass nach dem Default Attribut geschaut wird.

Lösung also:

[Default(5)] über die Eigenschaft schreiben und schon klappt es.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#3

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 11:47
Dann wird doch die 5, bzw. 5.0 nicht gespeichert?

Allerdings sollte das DEFAULT garnicht verwendet werden, wenn ein STORED angegeben ist, womit das ein Fehler wäre.



Und ja, das "normale" Default an Properties ist nur für ordinale Typen nutzbar (Byte bis Integer und Enums bzw. Sets)

Daher wurde schon vor Längerem das [Default]-Attribut hinzugefügt. (geht auch für Strings)


Und natürlich müssen Atttribute vor/über dem stehen, für was sie gelten.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
504 Beiträge
 
Delphi 12 Athens
 
#4

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 11:56
Ich denke das einzige was ich momentan machen kann ist die "stored" wegzulassen und somit die Properties immer speichern (außer sie sind 0). Sieht dann halt wieder im Objektinspektor doof aus wenn die alle fett sind obwohl die auf default stehen.

Vielleicht nimmt sich dem Bug bei Emba ja mal einer an. Meiner Meinung ist das ein Bug...
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 12:24
Dann wird doch die 5, bzw. 5.0 nicht gespeichert?
So isset, und so sollet - denn die storedproc sagte ja Result := not SameValue(FMyValue, 5.0);
Ich denke das einzige was ich momentan machen kann ist die "stored" wegzulassen und somit die Properties immer speichern (außer sie sind 0). Sieht dann halt wieder im Objektinspektor doof aus wenn die alle fett sind obwohl die auf default stehen.

Vielleicht nimmt sich dem Bug bei Emba ja mal einer an. Meiner Meinung ist das ein Bug...
Eventuell hab ich mich zu verschwurbelt ausgedrückt, aber ich stimme dir zu, dass es ein Bug ist.
5 nicht speichern kann man abbilden, wie ich oben schrieb. Ich glaube, man kann dann sogar die storedproc ganz weglassen und einfach nur das Attribut nutzen.
Denke dann aber daran, diesen Wert auch im ctor explizit zu setzen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 8. Mär 2021 um 12:27 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
655 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 13:54
Der Datentyp hat doch keinerlei Einfluss darauf, ob das Property gespeichert wird oder nicht. Wenn da "stored False" ist, darf überhaupt nichts gespeichert werden. Im DFM darf das Property dann überhaupt nicht vorhanden sein. Das ist die Funktion dieser Direktive. Auch der Defaultwert hat damit überhaupt nichts zu tun. Dafür gibt es "default X" und das entsprechende Zuweisen an das Feld im Create.

OP, ich sehe da nichts Falsches. Dass ein Property Integer 0 oder ein leerer String nicht gespechert wird, ist absolut richtig. Das sind ja die Anfangswerte auf die du deine Felder im Create initialisierst oder machst du das nicht? Dann ist der Fehler bei dir. Du solltest alle Felder in Create initialisieren.

EDIT:
Eventuell habe ich diene Frage falsch verstanden. Setzt du den einen default Wert beim Property? Also so...

Delphi-Quellcode:
property Abc: Integer read FAbc write FAbc default 5 stored IsStored;

TMyOvjet.Create...
begin
  FAbc = 5;
  inherited;
end;
In diesem Fall dürfte das Property nur dann nicht gepseichert werden, wenn es den Wert 5 hat oder IsStored False liefert. Verstehe cih das nun richtig, dass das Property auch nicht gespeichert wird, wenn es den Wert 0 hat. Das wäre dann in der Tat ein Bug, insofern dein Property so definiert ist wie oben in meinem Beispiel.

Geändert von Rolf Frei ( 8. Mär 2021 um 14:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#7

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 14:14
Wenn da "stored False" ist, darf überhaupt nichts gespeichert werden.
Das wird ja auch gar nicht bemängelt.

werden nicht gespeichert wenn entweder die stored-Funktion "False" zurück liefert (ist korrekt) oder Wert der Eigenschaft "0" ist (das ist falsch)
Das Problem ist hier offenbar, dass stored True zurück liefert, aber trotzdem nichts gespeichert wird, wenn der aktuelle Wert 0 ist. Insofern liegt es schon am falschen (impliziten) Default-Wert.

Es ist aber wohl kein Bug, denn das entspricht zumindest der Dokumentation:
Zitat:
Wenn sich der aktuelle Wert einer Eigenschaft von ihrem default-Wert unterscheidet (oder kein default-Wert vorhanden ist) und stored True ist, wird der Wert gespeichert. Treffen diese Bedingungen nicht zu, wird der Wert nicht gespeichert.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
698 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Property's "stored" bug...

  Alt 8. Mär 2021, 11:57
An einigen Stellen nutzen DevExpress und mittlerweile auch Emba ein weiteres Property "AssignedValues" um zwischen Defaultwert und zugewiesenem Wert zu unterscheiden.
Das wird leider noch nicht konsequent durchgezogen.

Das ist ein Bitset das einen Eintrag pro Property hat. Trägt man einen Wert in ein Property ein, geht das passende Bit auf true. Setzt man es wieder auf false ist das Property wieder default.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  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 12:43 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