AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank
Tutorial durchsuchen
Ansicht
Themen-Optionen

[Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

Ein Tutorial von haentschman · begonnen am 27. Jul 2017 · letzter Beitrag vom 24. Mai 2018
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
4.166 Beiträge
 
Delphi 12 Athens
 
#1

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 14:35
Wieso nur gnädig, ich bin doch immer froh wenn sich einer die Zeit nimmt etwas genauer zu erklären

Ich frage mich bei dem ganzen ORM nur immer ob es der richtige Weg ist.
Datenbanken wurde noch gemacht um 1 bis 1Mio. Datensätze zu verwalten.
ORM mit Listen im Speicher (OK, ich lass man das intelligente Speicherverwalten weg),
das läuft doch bei 1 Mio. Datensätze in eine Krise.

Dann die Anbindung der Daten an die Controls.
Im Prinzip bin ich ja voll dafür, also heist die Richtung LiveBinding,
nur leider funktioniert das nur rudimentär.
Welches Konzept hast du denn dafür, etwas Eigenes drüberstülpen ?

Rollo
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 14:42
Ich frage mich bei dem ganzen ORM nur immer ob es der richtige Weg ist.
Datenbanken wurde noch gemacht um 1 bis 1Mio. Datensätze zu verwalten.
ORM mit Listen im Speicher (OK, ich lass man das intelligente Speicherverwalten weg),
das läuft doch bei 1 Mio. Datensätze in eine Krise.
Ob du nun die 1 Mio. Datensätze in Listen mit Objekten oder aber in einem Dataset hast, wenn du dir 1 Mio. Datensätze von der DB holst, hast du die halt im Speicher. Aufpassen was du dir an Datensätzen holst must du immer selber, egal ob mit oder ohne ORM.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#3

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 15:06
Hallöle...
Zitat:
Ich frage mich bei dem ganzen ORM nur immer ob es der richtige Weg ist.
...für mich gibt es keinen Anderen. Ich bin durch die Einschränkungen der datensensitiven Controls, der Datasets, und vor Allem dem Durcheinander mit den Querys auf den Forms dazu gekommen. Im früherem Leben habe ich auch die Queries auf der Form mit DB Controls gehabt. Mit steigenden Anforderungen war das mir einfach zu unübersichtlich. Deshalb habe ich nach einer anderen Möglichkeit gesucht und gefunden...
Zitat:
ORM mit Listen im Speicher (OK, ich lass man das intelligente Speicherverwalten weg), das läuft doch bei 1 Mio. Datensätze in eine Krise.
...wie schon Jumpy sagte:
Zitat:
Ob du nun die 1 Mio. Datensätze in Listen mit Objekten oder aber in einem Dataset hast, wenn du dir 1 Mio. Datensätze von der DB holst, hast du die halt im Speicher. Aufpassen was du dir an Datensätzen holst must du immer selber, egal ob mit oder ohne ORM.
...du mußt selbst entscheiden welche Datensätze zu holst. Der Rest liegt im Datengrab...

Zitat:
Dann die Anbindung der Daten an die Controls.
...wo ist das Problem? Manches muß man auch manuell machen. Dafür heißt es auch programmieren...
Zitat:
Im Prinzip bin ich ja voll dafür, also heist die Richtung LiveBinding, nur leider funktioniert das nur rudimentär.
Livebindings habe ich probiert. Overhead war mir deutlich zu groß. Dann lieber klassisch. http://www.delphipraxis.net/190711-l...ceadapter.html
Zitat:
Welches Konzept hast du denn dafür, etwas Eigenes drüberstülpen ?
...weniger Probleme.

Geändert von haentschman (27. Jul 2017 um 16:30 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.166 Beiträge
 
Delphi 12 Athens
 
#4

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 16:21
Ich binn dann wohl immer noch im Irrglauben das die Datasets nicht Alle Daten im Speicher halten, sondern nur intelligent per Chinks sich die passenden Häppchen holen.

Das hängt sicher vom Query ab, ein FDMemTable oder ClientDataSet hat Alles im Speicher,
aber was ist mit TFDQuery, oder ähnlichen Konstrukten ?

Die sollen das doch genau das Daten- und MemoryManagement vor mir Kapseln.

ORM ist gut und richtig, das sehe ich auch so.
Aber warum eigentlich nicht direkt von TDataset auf die Controls binden ?
Warum unbedings Objekte dazwischenbauen ?
(Ok, ich verstehe das man in den Objekten tolle Logik reinbauen kann, aber sollte man das wirklich dort machen) ?

Mit einer Wrapperklasse sollte das doch "einfach" möglichs ein.
TDbGrid macht das doch im Prinzip auch so, nur der der Wrapper im DBGrid selber ist, sozusagen.

LiveBinding per Code macht das im Prinzip so, mit FillExpressions z.B. für ListView,
und da glaube ich eben auch das dies der richtige Weg ist, das per RTTI zu entkoppeln.

So in dieser Richtung, am liebsten per Code:
Delphi-Quellcode:
   FDb.Bind(Query1, ListView, 'Name', 'Text')
      .Bind(Query1, ListView, 'Descr', 'Detail')
      .Bind(Query1, ListView, 'ImgId', 'ImageIndex')
      .Bind(Query1, Grid1, '*')
      .Bind(Query1, Edit1, 'Name', 'Text', dbBidirectional)
      ...
      ;

Rollo
  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
 
#5

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 16:29
Ich binn dann wohl immer noch im Irrglauben das die Datasets nicht Alle Daten im Speicher halten, sondern nur intelligent per Chinks sich die passenden Häppchen holen.

Das hängt sicher vom Query ab, ein FDMemTable oder ClientDataSet hat Alles im Speicher,
aber was ist mit TFDQuery, oder ähnlichen Konstrukten ?
TFDQuery holt sich zwar die Daten häppchenweise, behält diese aber im Speicher - außer, es ist Unidirectional aktiv, dann werden die bereits besuchten Datensätze wieder aus dem Speicher geworfen.

Bezüglich ORM und DataSet/DBControls: Bei TMS Aurelius gibt es extra ein TAureliusDataset um die beiden Welten wieder zu vereinen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.431 Beiträge
 
Delphi 12 Athens
 
#6

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 17:09
Zitat:
Aber warum eigentlich nicht direkt von TDataset auf die Controls binden ?
1. u.a. Faulheit. Ich habe die Faxen von ständig Query.FieldByName('FBlubb').AsInteger voll.
2. Weil ich die Daten im DataSet nicht strukturieren kann. Ähnlich einer Ordnerstruktur.
Zitat:
Warum unbedings Objekte dazwischenbauen ?
1. Im Quelltext steht kein einziger Feldname.
2. Die Datenbank oder die Datenquelle ist komplett getrennt. Die Daten können über das Interface aus Oma´s Küchenschrank kommen. Der Küchenschrank kennt kein DataSet sondern XML...
3. Das macht das Wechseln zwischen den Datenbanken / Quellen einfacher. Getrennte Statements je Interface für die verschieden DBMS.
4. Am Breakpoint kann man sich das komplette Objekt mit seinen Daten ansehen.

eine Bitte:
Zitat:
Bei TMS Aurelius gibt es
...das wir in diesem Tutorial nur über dieses Beispiel ORM diskutieren. Danke.

Geändert von haentschman (27. Jul 2017 um 19:32 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.166 Beiträge
 
Delphi 12 Athens
 
#7

AW: [Tutorial] Laden / Speichern von Objekten in einer normalisierten Datenbank

  Alt 27. Jul 2017, 18:15
Wenn ich das richtig sehe hast du keine Interaktion drin, die Controls werden gefüllt.
Der Spass fängt aber dann an wenn du ein Grid oder Listview scrollen und editieren möchtest,
wenn Master-Detail sich synchronisieren müssen, korrekt die Daten in die DB zurückschreiben, etc..
Das müsste ja meiner Meinung nach auch gekapselt werden, das will man nicht immer wieder neu schreiben müssen.
Ich sehe das so das es eine Art "Bindings" in irgendeiner Form geben müsste, zum einen für die Daten (so wie du es hast z.B.), zum anderen eben diese Events (abhängig vom jeweiligen Control
und "Style" der Bedienung).

Wie würdest du denn so etwas bei deinem Vorschlag lösen ?

Rollo
  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 02:06 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