Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Delphi-LiveBindings (allgemein) (https://www.delphipraxis.net/171225-delphi-livebindings-allgemein.html)

RWarnecke 26. Okt 2012 19:36

Delphi-LiveBindings (allgemein)
 
Hallo zusammen,

ich beschäftige mich im Moment mit den LiveBindungs von Delphi. Da ich gerade ein neues größeres VCL-Projekt anfange, wollte ich auch eine neue Technik verwenden. Ich habe zu Delphi-LiveBindings schon ein paar Video-Tutorials gesehen und durch vieles Probieren einiges verstanden. Trotz dessen habe ich aber noch ein paar Fragen, wo ich noch nicht so richtig eine Antwort drauf gefunden habe. Hier mal meine Liste mit ersten Fragen :
  1. Ist das LiveBinding nur dazu da um Daten anzuzeigen oder kann ich es auch nutzen um Daten zum Beispiel in eine Datenbank zu schreiben ?
  2. Wenn Frage 1 mit ja zum Thema 'Schreiben' beantwortet wird, wie funktioniert das ganze dann ?
  3. Muss ich wirklich für jede Query eine eigene BindList erstellen ?
  4. Ich habe die Komponenten TBindScopeDB und TBindList auf ein DataModul gelegt. Warum konnte ich dann trotz richtigem LiveBindung keine Daten in meiner Eingabekomponete in einer anderen Unit anzeigen lassen ? Das Datenmodul war über Uses in meiner Form eingebunden. Erst wie die beiden Komponenten TBindScopeDB und TBindList auf der Form mit der Eingabekomponente waren hat es funktioniert.
  5. Wenn ich jetzt im neuen VCL-Projekt zum Beispiel alle Berechnungen und oder Datenbankabfragen in seperate Units packe und mit den LiveBindings arbeite, dann wäre es doch ein leichtes eine entsprechende Firemonkey-Anwendung zu erstellen ? In der Firemonkey-Anwendung benutze ich dann nur die entsprechenden LiveBindungs und kann so auf die Daten zugreifen und anzeigen lassen. Habe ich das Konzept von LiveBinding so richtig verstanden ?
Das sind erstmal alle Fragen.

Sir Rufo 26. Okt 2012 20:49

AW: Delphi-LiveBindings (allgemein)
 
1. Das Livebindung speichert nichts in einer Datenbank. Es kann aber ein DataSet über einen entsprechenden Adapter befüllen, bzw. auslesen.

2. Wie bisher, da gibt es keine Unterschiede. Das DataSet kann Daten wieder in die DB schreiben

3. Nein

4. Die BindList und die Scopes sollten auf dem Formular liegen. Theoretisch müsste das funktionieren, aber sinnvoll ist es nicht, denn das Binding erfolgt ja gegen Controls und warum sollte ich die trennen. Die Livebindings gehören zum Visualisieren und damit auf/zur View

5. Ja, eine entsprechende Anwendung mit entsprechender Trennung sieht wie folgt aus:

Datenmodul: Connection zur Datenbank (eigentlich ein Singleton)
Service: Kennt das Datenmodul und fragt die DB ab (Query). Die Kapselung zur Anwendung über ein DataSetProvider
Presenter: Hat einen eigene Service-Instanz und holt sich von diesem die Provider und übergibt diese an ein ClientDataSet. Das DataSet wird an die View übergeben
View: Die View nimmt vom Presenter das DataSet entgegen und zeigt den Inhalt an
(z.B. klassisch per DBGrid o.ä., oder per Livebinding mit BindscopeDB)

Das einzige was für FMX geändert werden muss ist die View.
Und wenn der Zugriff auf die DB geändert werden soll (andere DB, andere Komponenten) dann wird nur der Service und das Datenmodul gewechselt (angepasst)

Ich kann nächste Woche mal eine Demo-Anwendung zeigen, die dann ein und das selbe mit unterschiedlichen Zugriffen (DataSet, Objekte mORMot) sowie VCL und FMX. Genau das baue ich im Moment zusammen.

RWarnecke 26. Okt 2012 21:26

AW: Delphi-LiveBindings (allgemein)
 
Hallo Sir Rufo,

danke erstmal für Deine Antworten.

Zitat:

Zitat von Sir Rufo (Beitrag 1188569)
1. Das Livebindung speichert nichts in einer Datenbank. Es kann aber ein DataSet über einen entsprechenden Adapter befüllen, bzw. auslesen.

In wie fern über einen entsprechenden Adapter ?
Zitat:

Zitat von Sir Rufo (Beitrag 1188569)
4. Die BindList und die Scopes sollten auf dem Formular liegen. Theoretisch müsste das funktionieren, aber sinnvoll ist es nicht, denn das Binding erfolgt ja gegen Controls und warum sollte ich die trennen. Die Livebindings gehören zum Visualisieren und damit auf/zur View

Ok, habe ich verstanden.
Zitat:

Zitat von Sir Rufo (Beitrag 1188569)
Ich kann nächste Woche mal eine Demo-Anwendung zeigen, die dann ein und das selbe mit unterschiedlichen Zugriffen (DataSet, Objekte mORMot) sowie VCL und FMX. Genau das baue ich im Moment zusammen.

Eine entsprechende Demo-Anwendung würde mir sehr weiterhelfen.

Im Moment würde ich das Live-Binding nur dazu einsetzen um zum Beispiel ListBoxen oder ComboBox mit Werten aus Referenztabellen zu füllen. Den Rest würde ich wie immer machen. Was ich aber nicht für sehr sinnvoll halte.

Sir Rufo 26. Okt 2012 22:01

AW: Delphi-LiveBindings (allgemein)
 
Der Adapter ist z.B. BindScopeDB für ein DataSet oder BindScope für ein Objekt.

In XE3 gibt es auch Adapter die auch Adapter im Namen haben :)

RWarnecke 26. Okt 2012 22:16

AW: Delphi-LiveBindings (allgemein)
 
Und wie mache ich das über ein BindScopeDB ? Ich habe da keine entsprechende Option gefunden.

Sir Rufo 26. Okt 2012 23:41

AW: Delphi-LiveBindings (allgemein)
 
Hier mal ein Link wo das Step-by-Step erklärt wird (inkl. Bildern) :)

http://members.adug.org.au/2012/01/05/livebindings-02/

EDIT: Allerdings mit Ausnahme der Bindung der BindScopeDB an ein StringGrid, das ist in XE2 VCL sehr umständlich.

RWarnecke 27. Okt 2012 10:05

AW: Delphi-LiveBindings (allgemein)
 
Hallo Sir Rufo,

danke für das Tutorial. Es hat mir sehr weitergeholfen, die LiveBindungs zu verstehen.

Edit:
Ich habe es dank dem Tutorial hinbekommen, dass ich bestehende Datensätze ändern kann, aber leider keinen neuen Datensatz anlegen. Wie kann man beim Live-Binding unterscheiden zwischen neuen Datensatz und bestehenden Datensatz ? Gibt es dazu irgendwelche Tutorials ?

Sir Rufo 27. Okt 2012 12:09

AW: Delphi-LiveBindings (allgemein)
 
Es gibt da einen Navigator, den du dir dazuklatschen kannst und damit legst du einen neuen an.

Wie gesagt es ist eigentlich fast genau wie beim DBGrid (Ausnahme das An-/Einfügen von neuen Datensätzen). Das Binding ist ausschließlich für die Verbindung zwischen DatenContainer und Controls.

Der Rest ist genau so zu handhaben wie nach alter Väter Sitte.

Ein Button mit
Delphi-Quellcode:
MyDataSet.Append;
fügt einen neuen Datensatz an und das DBGrid hat diesen Satz auch als aktiv markiert. Genau so bei den Livebindings.

Gerade bei der Verwendung von DataSets sieht man, dass bei der Verwendung von Livebindings keine extra speziellen DB-Controls benötigt werden (DBEdit, DBGrid, etc.).

RWarnecke 28. Okt 2012 17:03

AW: Delphi-LiveBindings (allgemein)
 
Hallo zusammen,

ich habe mich jetzt 2 Tage intensiv mit dem LiveBinding von Delphi XE2 beschäftigt. Mein erstes Fazit ist : (alle Angaben ohne Gewähr)

Das LiveBinding bietet eine hervorragende Grundlage um wirklich die Daten von der GUI zu trennen. Wenn man einmal die Grundtechnik kapiert hat, kann man ganz schnell und einfach eine kleine Anwendung zusammenklicken ohne nur eine Zeile Code geschrieben zu haben. Leider musste ich feststellen, sofern ich keinen Fehler gemacht habe, dass noch nicht alle eigenen Delphi-Komponenten voll unterstützt werden, geschweige denn Komponenten von anderen Herstellern. Meine absolute Lieblingsfehlermeldung war "Error in BindLink_1. No observer support for <Komponentenname>". Die Fehlermeldung kam immer dann, wenn eine "Parse Expression" hinterlegt war. Dazu gehörten zum Beispiel TAdvMemo, TAdvDateTimePicker und TDateTimePicker. Komponenten wie TAdvEdit, TEdit, TLabel u.s.w. funktionieren wunderbar.

Deshalb werde ich jetzt noch auf die Antwort einer Supportanfrage warten und dann entscheiden, ob ich für das neue Projekt die LiveBindings einsetze oder ob ich meine bewährte Variante mit den Klassen einsetze.


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