Announcement

Collapse
No announcement yet.

Prüfen, ob während laufender Transaktion Änderungen vorgenommen wurden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Prüfen, ob während laufender Transaktion Änderungen vorgenommen wurden

    Wie kann ich bei der Komponente ADOConnection feststellen, ob der Benutzer während der noch laufenden Transaktion, Änderungen vorgenommen hat.

    Falls der Benutzer die Bearbeitung der Daten beendet, ohne vorher die Änderungen über einen Speichern-Button zu sichern, möchte ich per MessageDlg nachfragen, ob er die Änderungen wirklich nicht speichern möchte. Dieser MessageDlg soll natürlich nur eingeblendet werden, wenn auch wirklich Änderungen vorgenommen wurden. Da von der Bearbeitung eine Reihe von Tabellen betroffen sein können, möchte ich nicht bei jeder einzelnen ADODataSet-Komponente prüfen, ob Änderungen vorgenommen wurden, sondern zentral bei der ADOConnection Komponente.

    Vielen Dank für Eure Hilfe
    Peter Eisen

  • #2
    Hallo,

    ich habe das zwar nicht über die Connection geregelt, aber so schlimm ist das prüfen der Adodatasets auch wieder nicht:

    function TFrm.Cancel(bFragen :Boolean = TRUE):Boolean;
    var
    i :integer;
    Fragen :boolean;
    begin
    Result := TRUE;
    Fragen := bFragen;
    for i := 0 to Componentcount - 1 do
    begin
    if (Components[i] is TDatasource) and (TDatasource(Components[i]).DataSet.State in [dsEdit, dsInsert]) then
    begin
    if Fragen and (MessageDlg('Wollen Sie die Änderungen verwerfen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo) then
    begin
    result := FALSE;
    exit;
    end;
    Fragen := FALSE;
    TDataSource(Components[i]).DataSet.Cancel;
    end;
    end;

    end;

    Damit läufts ganz gut.

    Grüße

    Juli

    Comment


    • #3
      Hallo Julia,

      mein Problem dabei ist, dass der User während der Transaktion mehrere Datensätze bearbeiten kann und die State-Eigenschaft daher evtl. gar nicht mehr den Wert dsEdit bzw. dsInsert aufweißt.

      Viele Grüße
      Pete

      Comment


      • #4
        Hallo,

        ich arbeite ja in ähnlicher Weise. Solange kein Post erfolgt, ist der Status auch weiterhin auf Edit oder Insert.

        Post wird nur ausgeführt, wenn gespeichert oder ein weiterer Datensatz bearbeitet werden soll. Wird die Funktion Cancel abgefragt und hinterher ein Rollback gemacht, so wirkt sich das auch auf die schon bearbeiteten Datensätze aus.
        (Immer vorausgesetzt, dass eine Transaktion irgendwann einmal gestartet wurde).
        Das ganze klappt bei mir mit bis zu 25 ADODatasets ganz gut.

        Grüße
        Juli

        Comment

        Working...
        X