AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi bei keiner Änderung "nicht speichern"
Thema durchsuchen
Ansicht
Themen-Optionen

bei keiner Änderung "nicht speichern"

Ein Thema von Hansa · begonnen am 1. Jan 2003 · letzter Beitrag vom 2. Jan 2003
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

bei keiner Änderung "nicht speichern"

  Alt 1. Jan 2003, 16:04
Hi,

habe hier ein Problemchen. Beim Beenden der Bearbeitung habe ich eine Box, wo drin steht :"Soll der Datensatz gespeichert werden ?".

Wenn ich einen Datensatz ändern will und z.B. die falsche Nr. erwischt habe, verlasse ich die Form und gebe die richtige Nr. ein. Da ich nichts geändert habe ist obige Box wohl überflüssig. Wo kriege ich nun ein Entscheidungsmerkmal her, ob etwas geändert wurde oder nicht ?

Gruß
Hansa
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#2
  Alt 1. Jan 2003, 20:01
Hallo!

Am besten ist, den "Speichern"-Button auf inaktiv (oder unsichtbar) zu setzen und bei allen Feldern, die Daten enthalten, eine OnKeypress- oder OnChange-Ereignisroutine eintragen. Diese prüft dann Modified und aktiviert ggf. den Button.

Gruß

Dietmar Brüggendiek
Dietmar Brüggendiek
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3
  Alt 1. Jan 2003, 20:37
Hi,

ich habe Forms mit 3 Seiten voler Datenfeldern. Dann müßte man aber eine globale Routine haben, die alle Felder automatisch abcheckt. Würde mich mal interessieren, wie das geht. Aber es geht einfacher : Die DataSets haben eine Funktion "modified" :

Code:
procedure Form1.Button2Click(Sender: TObject);
begin
  IF NOT LiefModul.LiefDS.IsEmpty THEN BEGIN
showmessage ('LJLÖK');
    IF LiefModul.LiefDS.Modified THEN BEGIN
      if MessageDlg('Soll der Datensatz gespeichert werden ?',
        mtInformation, [mbYes, mbNo, mbCancel], 0) = mrYes then begin
        LiefModul.LiefDS.post;
        LiefModul.TransAction.Commit;
      END
      ELSE
        LiefModul.Transaction.Rollback;
    END
    ELSE
      LiefModul.Transaction.Rollback;
  END;
  LiefStamm.FormShow (Sender);
end;
Die arbeitet intern anscheinend wie die meisten Editoren. Bei einer Änderung wird ein Flag gesetzt. Was aber den Nachteil hat, beim rückgängig machen, ist der Datensatz immer noch als geändert gekennzeichnet. Erkläre mir aber mal einer wieso bei obigem Programm das ganze Programm verlassen wird ? Steht die ShowMessage (ziemlich am Anfang) im Quelltext, wird auch das FormShow am Schluß ausgeführt, dann habe ich wieder eine leere Form. Mache ich es weg, wird das Programm beendet. Wie immer Da hat man doch tatsächlich viel schneller als man dachte ein Problem gelöst und die Lösung verursacht das nächste.

Gruß
Hansa

hier ist noch das FormShow (mache ich den Showmessage Kommentar weg, ja dann geht es auch ):
Code:
procedure Form1.FormShow(Sender: TObject);
begin
// showmessage ('2Ä');
  Edit1.Enabled := true;
  Edit1.Text := '';
  Edit1.SetFocus;
  Button1.Enabled := true;
  Button2.Enabled := true;
end;
  Mit Zitat antworten Zitat
DKamps

Registriert seit: 7. Nov 2002
Ort: Unna
30 Beiträge
 
Delphi 7 Enterprise
 
#4

Drei Tipps (geile Rechtschreibung)

  Alt 2. Jan 2003, 11:15
1. wenn Du DataSet.Cancel ausführts sollte DataSet.Status wieder auf dsBrowse stehen, d.h. das Modified Attruibut wird gelöscht.
2. Mit ShowMessage öffnest Du ein modales Formular, d.h. eines was Du nicht verlassen kannst ohne das Formular zu beenden. Dies wirkt sich auf darunter liegende Formulare aus. Versuche doch mal statt Form.Show folgendes: Form.ShowModal, das hat den gleichen Effekt wie ShowMessage.
3. Dein Code sieht so aus, als ob der Befehl Form.Show immer aufgerufen wird, weil Deine letzte Schleife vorher endet. Ausnahme: die RunTime Library erkennt einen Fehler, dann springt sie sofort an das Ende der Prozedur.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5
  Alt 2. Jan 2003, 13:24
Hi,

ich glaube, ich habe das etwas irreführend erklärt. So wie es oben steht, also mit Showmessage, geht alles richtig, nur steht dann die Showmessage im Weg. Mache ich diese weg, kommt der beschriebene Effekt. Die Message kam durch Zufall ins Spiel, weil ich auf die Schnelle sehen wollte, ob ein Programmteil durchlaufen wird. Und sieh an, ohne weitere Änderung war das Programm (bis auf die ShowMessage) einwandfrei. Dann macht ich sie weg, weil ja alles lief wie es sollte und wieder springt er mir aus der Form. Aus Gaudi habe ich dann mal in eine andere Prozedur Showmessage reingeschrieben, dann ging auch alles. Es sieht so aus, daß Showmessage (mit die primitivste Prozedur) automatisch einen Fehler bereinigt.

Gruß
Hansa
  Mit Zitat antworten Zitat
DKamps

Registriert seit: 7. Nov 2002
Ort: Unna
30 Beiträge
 
Delphi 7 Enterprise
 
#6

ShowMessage

  Alt 2. Jan 2003, 15:41
Das würde mich aber sehr wundern!
Lass das ShowMessage mal weg und benutze beim Aufruf des Formulars ShowModal statt Show. Ich vermute dann klappt es.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7
  Alt 2. Jan 2003, 16:02
Hi,

jetzt kommt Exception "Cannot make visible Window modal" Ich habe FormShow durch ShowModal ersetzt.

Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#8
  Alt 2. Jan 2003, 16:43
Hallo Hansa,

hast du tatsächlich:

LiefStamm.ShowModal; geschrieben? Poste doch bitte noch einmal die gesamte Methode.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
DKamps

Registriert seit: 7. Nov 2002
Ort: Unna
30 Beiträge
 
Delphi 7 Enterprise
 
#9

ShowModal

  Alt 2. Jan 2003, 18:40
ShowModal geht nur, wenn das Formular nicht bereits mit Show geöffnet ist.
Wir haben etwas ananeinander vorbei gemailt, Formx.ShowModal soll Formx.Show ersetzen und nicht die Ereignisprozedur beim Anzeigen des Formulars FormShow.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: ShowModal

  Alt 2. Jan 2003, 19:22
Zitat von DKamps:
ShowModal geht nur, wenn das Formular nicht bereits mit Show geöffnet ist.
Wir haben etwas ananeinander vorbei gemailt, Formx.ShowModal soll Formx.Show ersetzen und nicht die Ereignisprozedur beim Anzeigen des Formulars FormShow.
ursprünglicher Code :

Code:
procedure TLiefStamm.Button2Click(Sender: TObject);
begin
  IF NOT LiefModul.LiefDS.IsEmpty THEN BEGIN
    IF LiefModul.LiefDS.Modified THEN BEGIN
      if MessageDlg('Soll der Datensatz gespeichert werden ?',
        mtInformation, [mbYes, mbNo, mbCancel], 0) = mrYes then begin
        LiefModul.LiefDS.post;
        LiefModul.TransAction.Commit;
      END
      ELSE
        LiefModul.Transaction.Rollback;
    END
    ELSE
      LiefModul.Transaction.Rollback;
  END;
//  showmessage ('1Ä');
  LiefStamm.FormShow (Sender);
end;
Ergebnis : Trotz FormShow wird Programm einfach beendet, ohne Fehlermeldung
Code:
      ELSE
        LiefModul.Transaction.Rollback;
    END
    ELSE
      LiefModul.Transaction.Rollback;
  END;
  showmessage ('1Ä');
  LiefStamm.FormShow (Sender);
end;
Ergebnis: Alles klappt, Unterschied : Showmessage vor FormShow nicht auskommentiert!


Code:
ELSE
        LiefModul.Transaction.Rollback;
    END
    ELSE
      LiefModul.Transaction.Rollback;
  END;
  LiefStamm.ShowModal;
end;
Ergebnis : "Cannot make a visible window modal". Anfang der Prozedur, siehe oben, jeweils gleich.

Gruß
Hansa
  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 08:07 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