Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi "Post" von DBEdit & Co. mit Abort; verhindern (https://www.delphipraxis.net/60408-post-von-dbedit-co-mit-abort%3B-verhindern.html)

Kinimod8 6. Jan 2006 13:07

Datenbank: DBase • Zugriff über: TDBF / BDE

"Post" von DBEdit & Co. mit Abort; verhindern
 
Hallo,

ich möchte verhindern, dass die datenintensiven Komponenten (TDBxxxxx) nach Bearbeitung automatisch TDataSet.Post; auslösen - die geänderten Daten sollen nur bei Klick auf Button1 gespeichert werden.

Also habe ich einen Boolean mayModify mit false intialisiert und setze ihn nach Klick auf Button1 auf true.

In der Ereignisbehandlung "OnBeforePost" habe ich dann folgendes geschrieben:

Delphi-Quellcode:
procedure TForm1.Table1BeforePost(DataSet: TDataSet);
begin
 if not MayModify then
 begin
  Abort;
 end;
 MayModify := false;
end;
Das funktioniert soweit wunderbar. Nur muss der User jetzt die Daten auch speichern, sonst ist die weitere Navigation in der Tabelle unmöglich, weil sämtliche Methoden wie z.B. Next oder Last auch BeforePost aufrufen :cry:

Wie kann ich mein Problem dennoch lösen?

alex517 6. Jan 2006 13:17

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
Schau mal unter dem Stichwort CachedUpdates nach.
alex

sir-archimedes 6. Jan 2006 13:28

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
Bzw. schau dir mal die Methode "Cancel" an. Damit wird ein Append/Edit-Versuch abgebrochen. Denn in der Regel postet dein Query/Table beim verlassen des Datensatzes automatisch.

marabu 6. Jan 2006 13:39

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
Das automatische Speichern wird durch das Verschieben des Datensatzzeigers ausgelöst. Insofern würde ich einfach das Verschieben verhindern, solange die Daten nicht durch den Benutzer gespeichert wurden:

Delphi-Quellcode:
procedure TDataForm.TableBeforeScroll(DataSet: TDataSet);
begin
  if DataSet.State <> dsBrowse then
    Abort;
end;
Freundliche Grüße vom marabu

Kinimod8 6. Jan 2006 13:57

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
Erstmal vielen Dank für die Hilfe!

Zitat:

Zitat von marabu
...das Verschieben verhindern, solange die Daten nicht durch den Benutzer gespeichert wurden

Aber genau das möchte ich ja nicht. Ich möchte das der Nutzer auch ohne Abspeichern der Änderungen in der Tabelle navigieren kann.

marabu 6. Jan 2006 14:46

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
So quer kann ich garnicht denken - sorry. Was soll denn das werden? Wie behält denn da der Benutzer deines Programms den Überblick, welche Änderungen er gemacht hat?

marabu

Kinimod8 6. Jan 2006 14:52

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
Ist doch ganz einfach - glaub ich :gruebel: :
Der Benutzer ändert die Daten eines Datensatzes und kann danach auf "Änderungen speichern" klicken oder auf "Abbrechen" bzw. einfach einen Datensatz weiter gehen.

marabu 6. Jan 2006 15:37

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
Jetzt liest es sich so, als ob du nur das Standardverhalten beim Scrolling ändern möchtest. Packe einfach die Methode Cancel (hallo dominik) in das Ereignis BeforeScroll:

Delphi-Quellcode:
procedure TDataForm.TableBeforeScroll(DataSet: TDataSet);
begin
  if DataSet.State <> dsBrowse then
    Cancel;
end;
marabu

sir-archimedes 6. Jan 2006 16:08

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
Dann bin ich ja beruhigt - habe den anderen Dominik nämlich so verstanden :)

Kinimod8 6. Jan 2006 16:28

Re: "Post" von DBEdit & Co. mit Abort; verhind
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von marabu
Jetzt liest es sich so, als ob du nur das Standardverhalten beim Scrolling ändern möchtest. Packe einfach die Methode Cancel (hallo dominik) in das Ereignis BeforeScroll:

Delphi-Quellcode:
procedure TDataForm.TableBeforeScroll(DataSet: TDataSet);
begin
  if DataSet.State <> dsBrowse then
    Cancel;
end;
marabu

Dieser Code bewirkt bei mir gar nichts.

Zum besseren Verständnis habe ich mal eine Echse angehängt, die zeigt, was ich will ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:15 Uhr.
Seite 1 von 2  1 2      

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