Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Die Sache mit dem Listenproperty

  Alt 2. Mär 2017, 22:54
Hi zusammen
Zitat:
Ich würde vermutlich Lazy Initialization benutzen: ein privates Feld vom Typ TStrings oder gleich TStringList.
Eigentlich habe ich ja genau dies - mit TStrings statt TStringlist - umzusetzen versucht und erstmal eine AV erhalten.

Zitat:
Was genau soll das Result.Clear; bewirken? An der Stelle ist doch Result noch gar nicht definiert...
...
Zitat von Delbor:
Andrerseits sollte es keinen Schaden anrichten.

Ähm - doch! Da Result an der Stelle nicht definiert ist, kann alles Mögliche drin stehen (auch nil). In jedem Fall ist der Aufruf Result.Clear zu entfernen. Schau mal, ob es dann funktioniert.
Nach der Antwort von Uwe Raabe in Beitrag sechs und da es seit Entfernung des "Result:=True;" genau das tut, was es sollte, bin ich überzeugt, dass ich FContentmastertables auch als TStrings deklarieren könnte. Das würde auch deinem verlinkten (bis auf TStringlist) Beispiel unter Lazy Initialization entsprechen.

@sakura:
Zitat:
Mal grundsätzlich ist das so kein guter Ansatz:

Wenn mehrere Threads gleichzeitig auf die Eigenschaft zugreifen, wirst Du sehr seltsame Ergebnisse bekommen
Es gibt in dieser Anwendung nur den einen Thread. Einen zweiten wird es wohl nicht geben. Denn trotz dem Einsatz von MySQL handelt es sich um eine Desktopanwendung. Und auch wenn es mehrere Threads neben dem Haupttread geben sollte. müssten diese in einer Criticalsection auf den Speicher zugreifen. Dazu käme wohl noch der Zugriff auf ein Objekt...
Zitat:
Ändert sich das Ergebnis so rasant, dass es Sinn mach mit jedem Zugriff alles neu zu ermitteln
Das Ergebnis dient dazu, die Tabellen der DB anzuzeigen. Das Property soll die Tabellen nach oben zur Verfügung stellen; die Gui muss nur daruf zugreifen. Ich weiss: dazu gibt es bei Firedac die Connection-Komponente.

Zitat:
Macht evtl. eine lokale StringListe mehr Sinn/bzw als Rückgabetyp ein Array?
Da FContentmastertables ein privates Feld des Datenmoduls ist und in dessen Create-bzw Destroy-Prozedure erzeugt/gelöscht wird, macht eine private Liste keinen Sinn, ausser dass sie bei jedem Zugriff erstellt/zerstört werden müsste.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor ( 2. Mär 2017 um 22:58 Uhr)
  Mit Zitat antworten Zitat