Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TDBComboBox: Auswahl geht verloren bei OnEditMode (https://www.delphipraxis.net/214870-tdbcombobox-auswahl-geht-verloren-bei-oneditmode.html)

Gremlin 26. Mär 2024 08:02

Datenbank: Egal • Version: 10.2 • Zugriff über: BDE, FireDAC

TDBComboBox: Auswahl geht verloren bei OnEditMode
 
Hallo


ich habe eine simple TFDMemTable mit TDataSource und einer TDBComboBox.

Die Komponenten sind alle miteinander verbunden, die ComboBox geht auf ein Integer-Feld.
In TFDMemTable ist der Event OnBeforeEdit mit einer Abfrage verbunden, ob in den Edit-Modus gewechselt werden soll.
Die ComboBox ist im Style=csDropDownList und enthält diverse Integer-Werte in Items.

Code:
  if not(FDMemTable1.State=dsEdit) then
    if (MessageDlg('in Edit Mode schalten?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes) then Abort;
Ist die Datenmenge im Edit-Mode, so kann über die Combo der Wert ohne Probleme geändert werden.
Ist die Datenmenge jedoch nicht im Edit-Mode und wird versucht über die Combo einen Wert auszuwählen, so enthält nach der Auswahl und der Abfrage "in Edit Mode schalten?" der Wert der Combo wieder den Anfangswert.

Wahrscheinlich ist dieses Problem schon immer vorhanden, aber jetzt erst aufgefallen.
Irgendeine Idee??

Danke

himitsu 26. Mär 2024 08:59

AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
 
Zitat:

Ist die Datenmenge jedoch nicht im Edit-Mode und wird versucht über die Combo einen Wert auszuwählen, so enthält nach der Auswahl und der Abfrage "in Edit Mode schalten?" der Wert der Combo wieder den Anfangswert.
So richtig versteh ich grade nicht, was hier das Problem sein soll.


Und wie geht das "von alleine" in den EditMode?

Oder rufst du selbst irgendwo ein .Edit auf?
Wenn ja, warum dann nicht davor prüfen?


z.B. AutoEdit bei der DataSource auf False setzen.

PS: Was ist mit dsInsert? Da darf auch editiert werden.

Uwe Raabe 26. Mär 2024 09:19

AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
 
Die Beschreibung ist etwas vage, aber ich tippe mal darauf, dass der Dialog einfach den Fokus klaut. Vielleicht hilft es schon, diesen nach der Abfrage wieder auf das Control zu setzen.

Gremlin 26. Mär 2024 10:03

AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
 
AutoEdit der DataSource ist True.

Die TDBComboBox möchte die Datenmenge, durch die Auswahl eines Feldwertes im Dropdown, in den Edit-Modus schalten.

Wird dieser Vorgang im BeforeEdit der Datenmenge durch ein Abort abgebrochen, so enthält das Control den ausgewählten Wert, wird der Vorgang nicht abgebrochen, dann enthält das Control den vorherigen Wert vor der Änderung

* Wert in Control: 1 (Ursprungswert)

* Auswahl über Combo: 3 -> möchte automatisch in EditMode wechseln

- Abbruch über Abort: Wert in Control: 3
- Kein Abbruch über Abort: Wert in Control: 1 (Ursprungswert)

Uwe Raabe 26. Mär 2024 10:16

AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
 
Danke, und welches Verhalten möchtest du haben? Du musst entschuldigen, dass wir nicht so tief im Kontext sind wie du.

Gremlin 26. Mär 2024 11:04

AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
 
Sorry IMHO ist der Kontext aber eigentlich nicht so tief.

- Abort bei BeforeEdit, Änderungen werden verworfen
- kein Abort bei BeforeEdit, Änderungen werden übernommen

BTW: Bei normalen Edits klappts ja wie es soll..

Uwe Raabe 26. Mär 2024 11:42

AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
 
Zitat:

Zitat von Gremlin (Beitrag 1535011)
Sorry IMHO ist der Kontext aber eigentlich nicht so tief.

Nun, da du kein Beispielprojekt bereitstellst fangen wir ja quasi auf einem leeren Blatt Papier an.

Zitat:

Zitat von Gremlin (Beitrag 1535011)
- Abort bei BeforeEdit, Änderungen werden verworfen
- kein Abort bei BeforeEdit, Änderungen werden übernommen

BTW: Bei normalen Edits klappts ja wie es soll..

Ja, wie soll es denn?

Aus deinen Ausführungen geht immer noch nicht hervor, ob die Beschreibung des Verhaltens den Soll- oder Ist-Zustand wiedergibt. Der Hinweis auf die normalen Edits bringt vielleicht mehr Informationen, erfordert aber erstmal selbst nachzuprüfen, wie die sich nun genau verhalten um den Unterschied zur TDBComboBox herauszubekommen. Das ist sicher nicht nur für mich mehr Aufwand als ich bereit bin da hineinzustecken.

Eine gute Fehlerbeschreibung enthält neben den erforderlichen Schritten auch eine Beschreibung dessen was man erwartet (exp) und dessen was man aktuell bekommt (act). Damit wird wiederholtes Nachfragen in der Regel überflüssig.

Solange wir dein Problem nicht verstehen, wirst du vermutlich nur eher unbrauchbare Antworten bekommen - wenn überhaupt.

Frickler 26. Mär 2024 14:43

AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
 
Zitat:

Zitat von Gremlin (Beitrag 1534999)
Ist die Datenmenge jedoch nicht im Edit-Mode und wird versucht über die Combo einen Wert auszuwählen, so enthält nach der Auswahl und der Abfrage "in Edit Mode schalten?" der Wert der Combo wieder den Anfangswert.

Aber wenn man "Nein" wählt, dann steht in der Combo der ausgewählte Wert...

(genau habe ichs nicht mehr auf dem Schirm, aber ich glaube, das war einer der Gründe, weswegen ich seit 25+ Jahren einen Bogen um "AutoEdit" mache)

QuickAndDirty 27. Mär 2024 13:52

AW: TDBComboBox: Auswahl geht verloren bei OnEditMode
 
Arbeitet denn Firedac überhaupt mit Abort?
Ich meine , das ist ja immerhin eine stille Exception. Ich könnte mir vorstellen, dass Firedac bessere Methoden anbietet um diesen Vorgang abzubrechen.

geht sowas ?
Delphi-Quellcode:
if not(FDMemTable1.State=dsEdit) then
    if (MessageDlg('in Edit Mode schalten?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes) then
    Begin
      Dataset.cancel;//Datensatz in den Ursprungs zustand versetzen
      Abort;
    end;
oder sowas
Delphi-Quellcode:
if not(FDMemTable1.State=dsEdit) then
    if (MessageDlg('in Edit Mode schalten?', mtConfirmation, [mbYes, mbNo], 0) <> mrYes) then
    Begin
      TThread.ForceQueue(TThread.Current,
        Procedure
        Begin
          Dataset.cancel;
          Dataset.editmode := false;// Weiß nicht ob das muss...
        end;
      );
      Exit;
    end;


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