AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Live Bindings Clientdataset <-> zu mehreren Komponenten

Live Bindings Clientdataset <-> zu mehreren Komponenten

Ein Thema von BlackGuest · begonnen am 29. Sep 2014 · letzter Beitrag vom 1. Okt 2014
Antwort Antwort
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#1

Live Bindings Clientdataset <-> zu mehreren Komponenten

  Alt 29. Sep 2014, 13:47
Ich versuche mich gerade mit XE7 in die neuen Möglichkeiten einzuarbeiten, die die Live Bindings bieten.
Momentan versuche ich mich an einem kleinen Datenbankprojekt. Ich habe ein TClientDataset, welches in einem Datenbankformular platziert ist.
Auf die Daten greife ich über ein zweites Formular zu. Dazu habe ich die einzelnen Datenfelder Über den Livebindingsdesigner mit den Datenfeldern verknüpft.
Die BindSource und ein BindNavigator liegen ebenfalls mit auf dem Eingabeformular. Funktioniert alles so weit ausgezeichnet.

Jetzt will ich die Daten zusätzlich in Tabellenform darstellen und editieren können. Dafür habe ich ein TMSFMXGrid ins Formular gepackt und im Livebindings-Designer dieses ebenfalls mit der BindSource verbunden (* <--> *).
Funktioniert auch. Ich kann Daten im Gitter ändern, und auch im Gitter mit dem BindNavigator navigieren.

Problem ist jetzt, die Änderungen, die ich im Gitter ausführe werden nicht in die Editfelder übernommen. Nach dem Beenden der Anwendung und Neustart sind die Daten, die ich im Grid geändert habe wieder weg. Ändere ich Daten über die Edit-Felder, werden diese dauerhaft in die Datenbank übernommen.

Habe mich schon dumm und dämlich gesucht, muss ich noch irgend eine Funktion aufrufen, die die Daten des TMSFMXGrids in die Datenbank zurückschreibt?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Live Bindings Clientdataset <-> zu mehreren Komponenten

  Alt 29. Sep 2014, 14:50
Geht es, wenn du nur das Grid an die DataSource bindest?


Eventuell gibt es im Grid keinen Rückkanal ins DataSet, welcher das Schreiben der Datem übernimmt.
Hast du schon bei TMS nachgefragt?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#3

AW: Live Bindings Clientdataset <-> zu mehreren Komponenten

  Alt 30. Sep 2014, 10:50
Ich habe mal versuchsweise eine zweite BindSource nur mit dem Grid verbunden. Das Verhalten ist identisch. Ich kann die Daten im Grid ändern aber nach einem Programmneustart sind die geänderten Daten weg.
Dann habe ich noch versucht ClientdtDaset.ApplyUpdates aufzurufen. Dann bekomme ich die Meldung "fehlender Datenprovider oder Datenpaket". Das Clientdataset hat aber den richtigen Filename.?

Am Anfang hatte ich ein StringGrid an statt des TMS-Grids. Der Eigenschaft Filename des ClientDataSets hatte ich im Objektinspektor fest den Pfad und den Dateinamen meiner Testdatei zugewiesen und diese beim Programmstart geändert. Da hatte ich das Gleiche Verhalten. Nachdem ich im Objektinspektor die Eigenschaft auf '' gesetzt habe ging es dann komischerweise.?

Bei TMS habe ich noch nicht nachgefragt.

Gruß
BlackGuest
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Live Bindings Clientdataset <-> zu mehreren Komponenten

  Alt 30. Sep 2014, 14:31
Da du ja keinen Source zeigen möchtest - ist wohl zu geheim - hier mal ein kleines Beispielprojekt mit einem ClientDataSet, Navigator, Grid und Edit-Feldern - so wie du das beschrieben hast.
Angehängte Dateien
Dateityp: zip dp_182086.zip (9,1 KB, 16x aufgerufen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#5

AW: Live Bindings Clientdataset <-> zu mehreren Komponenten

  Alt 30. Sep 2014, 15:12
Danke für das Beispiel.
Geheim ist da nichts, gibt nur nicht viel an Source. Gut, hätte vielleicht trotzdem Sinn gemacht. Mein Programm sieht eigentlich genau so aus wie das Beispiel.

Ich habe das Beispiel mal modifiziert und ein TMSFMXGrid mit reingepackt. Ergibt genau das gleiche Verhalten.
Ändere ich was im Grid oder in den Editfeldern, werden die Änderungen in allen drei Controls angezeigt. Ändere ich was im TMSFMXGrid, wird die Änderung nur da angezeigt und nach einem Neustart sind die Änderungen weg. Scheint also doch irgend eine Einstellung oder ein Bug im TMSFMXGrid zu sein, wobei ich eher ersteres vermute.

Das modifizierte Beispiel habe ich mal angehängt.

Gruß
BlackGuest
Angehängte Dateien
Dateityp: zip dp182086_modifiziert.zip (61,8 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Live Bindings Clientdataset <-> zu mehreren Komponenten

  Alt 30. Sep 2014, 15:22
Am Anfang hatte ich ein StringGrid an statt des TMS-Grids. Der Eigenschaft Filename des ClientDataSets hatte ich im Objektinspektor fest den Pfad und den Dateinamen meiner Testdatei zugewiesen und diese beim Programmstart geändert. Da hatte ich das Gleiche Verhalten. Nachdem ich im Objektinspektor die Eigenschaft auf '' gesetzt habe ging es dann komischerweise.?
Funktioniert denn mein Beipielprojekt bei dir?

Denn anscheinend hat das ja vorher nicht funktioniert.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#7

AW: Live Bindings Clientdataset <-> zu mehreren Komponenten

  Alt 30. Sep 2014, 19:02
Ja, es funktioniert. Genau so wie es soll.
Allerdings nicht, wenn ich zusätzlich ein TMSFMXGrid verwende. Siehe Anhang von meinem letzten Post.

Gruß
BlackGuest
  Mit Zitat antworten Zitat
BlackGuest

Registriert seit: 30. Jan 2009
52 Beiträge
 
Delphi XE7 Professional
 
#8

AW: Live Bindings Clientdataset <-> zu mehreren Komponenten

  Alt 1. Okt 2014, 21:55
Die Antwort von TMS war bis jetzt nicht gerade sehr vielversprechend. Es wird wohl schwer sein das nachzuvollziehen, da wohl einiges umgeworfen wurde(von XE5 auf XE6 und auch auf XE7).
Das von TMS mitgelieferte Beispiel (nach Installation unter ...\TMS Pack for FireMonkey Demos\Grid LiveBindings) funktioniert bei mir auch nicht.
Genau das Gleiche Fehlerbild.

Ich habe das TMS Grid angedacht, da ich in dem Gitter ein paar Comboboxen für die Eingabe vordefinierter Werte benötige. Die "alte" Variante, dass ich einfach über die Eingabezelle eine Combobox einblende funktioniert nicht mehr, da ich keine Möglichkeit gefunden habe, wie ich bei dem Firemonkey Grid die Position der aktuell selektierten Zelle ermittle.

Wenn ich es richtig verstanden habe ist die TGrid-Componente aber auch nur ein Container, in dem ich beliebige Controls unterbringen kann. Gibt es dazu irgendwo ein Beispiel?

Gruß
BlackGuest
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:36 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