AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert
Thema durchsuchen
Ansicht
Themen-Optionen

Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

Ein Thema von Getox · begonnen am 31. Mär 2020 · letzter Beitrag vom 1. Apr 2020
Antwort Antwort
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

  Alt 31. Mär 2020, 10:56
Hallo,

ich habe ein TwwDBEdit. Wenn ich den Wert darin ändere und das Edit dann verlasse, wird der Wert zuverlässig in das DataField übernommen. Wenn ich aber direkt auf meinen Speichern-button klicke ohne vorher das Edit zu verlassen, steht in dem verknüpften Field noch der alte Wert. Es sind aber knapp 10 TwwDBEdits mit diesem Dataset verbunden und man weiß so nicht, ob und welches nun verändert wurde. Gibt es eine Funktion, um direkt die ganzen Änderungen aus allen Edits ind das Dataset zu flushen OHNE es zu posten?

Danke
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

  Alt 31. Mär 2020, 11:10
Ok... UpdateRecord klappt.
Ist ein Nilpferd ein Pferd, das nicht vorhanden ist?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

  Alt 31. Mär 2020, 11:14
Gibt es da vielleicht sowas wie eine Option ala ImmidiatePost, in dem Edit?

Bei DevExpress das Gleiche, damit bei Eingabe nicht jeder einzelne Tastendruck ein OnChange auslöst, wird "standardmäßig" erst beim OnExit der Wert an das dahinterliegende DataSet weitergegeben, aber dort lässt sich dieses Verhalten umstellen.
Bzw., es gibt dort an den Edits auch eine Post-Methode, wo man den aktuellen Wert manuell speichern übertragen kann.
$2B or not $2B
  Mit Zitat antworten Zitat
DasWolf

Registriert seit: 7. Jun 2016
76 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

  Alt 31. Mär 2020, 13:31
Ich würde dann mal behaupten, Du hast einen Speichern-Button des falschen Typs.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

  Alt 31. Mär 2020, 13:37
Ich würde dann mal behaupten, Du hast einen Speichern-Button des falschen Typs.
Das ändert leider nichts am grundsätzlichen Problem. (ok, er könnte diesen einen Button eventuell leicht austauschen)

Ja, ein ToolButton/SpeedButton, der keinen Fokus bekommt, wodurch dann kein OnExit auftritt und der Wert nicht im DataSet landet, ist echt blöd,
aber z.B. auch der DatasetNavigator jeglicher Hersteller besteht ausschließlich aus SpeedButtons, was deswegen echt Spaß macht.
$2B or not $2B
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#6

AW: Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

  Alt 31. Mär 2020, 17:47
Speichern geht eigentlich auch recht einfach mit DataSet.Post

Da ich gerne mit TActionList arbeite, gibt es in sonnem Fall auch eine Action für's speichern. ShortCut wird Strg+S und ist damit dann auch "kompatibel" zu 'ner Masse anderer Programme, bei denen das Speichern eines Dokumentes, einer Tabelle ... mit dem ShortCut Strg+S versehen ist.

Man muss dann auch nicht schauen, ob man die Tabreihenfolge exakt richtig angelegt hat, kann auch Speedbuttons und DBNavigatoren benutzen, ohne irgendwelche Fokusprobleme zu bekommen. Ist man gerade in 'nem DBMemo klappt das Verlassen mit Tab auch nicht so recht, jedenfalls, wenn das Memo auch Tabs zulässt ... Und mit Strg+S ist man meist auch noch schneller, als immer erstmal mit der Maus die "richtige Stelle" zu suchen / finden
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

  Alt 31. Mär 2020, 19:09
Speichern geht eigentlich auch recht einfach mit DataSet.Post
nein?

Das Dataset.Post speichert ja nur, was schon im Dataset drin ist, aber wenn das Edit den Wert noch nicht übergeben hat,
und dann ist der Wert nach dem Post auch weg, da im AfterPost/AfterScroll die Edits sich den aktuellen Wert des Datasets holen.


Das TDBEdit von Delphi übergibt den Wert sofort beim Edit.OnChange. Beim Dataset.Post wird das dann problemlos gespeichert.

Es gibt aber DBEdits anderer Hersteller, die übergeben "standardmäßig" den eingegebenen Wert erst beim Edit.OnExit oder eben z.B. bei sowas wie Edit.Post oder Edit.Update, bzw. Edit.DataController.Post ...
Bis zu diesem Moment weiß das Dataset noch nichtmal, dass es eine Änderung gab/gibt.


Funktionsbeispiel:
  • dein TDataset und das eine TField darin ist ein TMemo
  • dein Dataset.Post wäre demnach Memo.Lines.SaveToFile
  • das DBEdit ist ein TEdit
    • normal macht das Edit beim Edit.OnChange ein {Memo.Lines[0]} Memo.Lines.Text := Edit.Text
    • aber es gibt auch "bessere" Edits, die machen das nicht bei jedem einzelnen OnChange, sondern nur einmal beim OnExit (oder bei einem expliziten Update-Befehl)
  • Hast du jetzt eines der besseren DBEdits und machst nun dein Post (Memo.Lines.SaveToFile), ohne vorher z.B. den Fokus zu ändern, dann ist dort die Änderung noch nicht enthalten.
  • -
  • ach ja, beim Memo.OnChange natürlich Edit.Text := Memo.Lines[0]; , was dann quasi beim Open/Load/AfterScroll den Inhalt des DBEdits füllt
$2B or not $2B

Geändert von himitsu (31. Mär 2020 um 19:16 Uhr)
  Mit Zitat antworten Zitat
Heimlich

Registriert seit: 1. Apr 2020
11 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Dataset übernimmt Wert erst wenn TwwDBEdit Focus verliert

  Alt 1. Apr 2020, 10:00
Guten Morgen,

mach vor dem Speichern einfach einen Fokuswechsel. Ganz easy auf ein Control, das immer sichtbar ist.
  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 13:43 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