AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Transaction auf Änderungen überprüfen
Thema durchsuchen
Ansicht
Themen-Optionen

Transaction auf Änderungen überprüfen

Ein Thema von Morphie · begonnen am 5. Dez 2012 · letzter Beitrag vom 6. Dez 2012
Antwort Antwort
Seite 1 von 2  1 2      
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#1

Transaction auf Änderungen überprüfen

  Alt 5. Dez 2012, 13:41
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBDAC
Zuerst mal: Ich habe eine Connection, eine Transaction, diverse Queries, DataSources, DBGrids und DBEdits.

Ich möchte dem Anwender jetzt die Möglichkeit geben, Änderungen an allen Daten durchführen zu können.
Die Änderungen sollen aber noch nicht sofort in die Datenbank geschrieben werden, sondern erst per Knopfdruck.

Beim Speichern führe ich einfach ein Commit der Transaction aus und alle Daten sind gespeichert.
Führe ich das Commit nicht aus (z.B. weil ich das Fenster einfach schließe) sind die Änderungen verworfen (automatisches Rollback).

Jetzt ist es so, dass der Speichern-Button (der mit einer TAction verknüpft ist), immer aktiv ist. Er ist also auch aktiv, wenn überhaupt keine Änderung durchgeführt wurde.

Gibt es einen sauberen Weg, den Button / die Action nur zu aktivieren, wenn sich auch wirklich etwas an den Daten geändert hat (Update / Insert)? Also quasi eine "Ist die Transaction dirty?"-Abfrage
Oder muss ich jedes DataSet überwachen und ein Boolean-Feld "FDataModified" einführen?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Transaction auf Änderungen überprüfen

  Alt 5. Dez 2012, 13:53
Wenn möglich verwende ich TClientDataSet, und habe damit eine Property

http://docwiki.embarcadero.com/Libra...et.ChangeCount

In der ActionManager Eventbehandlung (OnUpdate) werden dann alle aktiven ClientDataSets geprüft, ob eines mit ChangeCount > 0 dabei ist.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Transaction auf Änderungen überprüfen

  Alt 5. Dez 2012, 15:35
Ich habe gerade meine IBDAC-Hilfe nicht parat, aber vielleicht hilft dieser Thread weiter?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Transaction auf Änderungen überprüfen

  Alt 5. Dez 2012, 19:06
Hi,

hast Du schon mal die Ereignisse von IBCTransaction angeschaut?

Bei mir gibts da OnStart, OnCommit und OnRollback - das sollte doch ausreichen um deinen Button zu steuern?

Grüße
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#5

AW: Transaction auf Änderungen überprüfen

  Alt 5. Dez 2012, 19:28
werde ich mir morgen mal genauer ansehen... Danke =)
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#6

AW: Transaction auf Änderungen überprüfen

  Alt 6. Dez 2012, 07:30
Ich habe gerade meine IBDAC-Hilfe nicht parat, aber vielleicht hilft dieser Thread weiter?
Also die Eigenschaft Active steht bei mir immer auf true. Ist ja auch klar, da die Transaktion ja bereits aktiviert wird, wenn ich mir die Daten aus der Datenbank hole...
Ich brauche aber irgendwie ein Ereignis, um zu ermitteln, ob es Änderungen gibt.

Hi,

hast Du schon mal die Ereignisse von IBCTransaction angeschaut?

Bei mir gibts da OnStart, OnCommit und OnRollback - das sollte doch ausreichen um deinen Button zu steuern?

Grüße
Hier gilt das gleiche... OnStart wird ausgeführt, sobald ich mir die Daten hole... Das mache ich im OnCreate der Form. Somit ist der Speichern-Button immer aktiv.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#7

AW: Transaction auf Änderungen überprüfen

  Alt 6. Dez 2012, 07:51
Guten Morgen...

unabhängig von der Frage eine Bemerkung. Transaktionen sollten so kurz wie möglich offen gehalten werden. Schon gar nicht über die Programmlaufzeit. Denkanstoß: Was passiert wenn eine Transaktion offen ist und die Putze den Stecker vom Computer rauszieht ? Der bessere Weg ist die Daten z.B. in Objekten / Listen zu halten, ein Event bei Änderungen auslösen, das Objekt in eine "Changed List" eintragen und ggf. ein Changed Flag setzen. Diese Daten können dann in einem schnellen Rutsch aktualisiert werden.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#8

AW: Transaction auf Änderungen überprüfen

  Alt 6. Dez 2012, 09:15
Wenn ich dich richtig verstehe, würdest du von Datensensitiven Controls abraten, bzw. eine weitere Zwischenschicht zwischen Datenzugriff und Präsentation ziehen?
Dann wären wir wieder beim leidigen Thema "Wie binde ich dann eine Liste von Objekten einfach an meine GUI?"
Und nimmt mir Delphi da die Arbeit fürs ChangeTracking ab?

Soweit mir bekannt, ist das in Delphi nur mit viel Programmieraufwand möglich.
Der RAD-Ansatz geht meiner Meinung nach dabei flöten... Ich lasse mich aber gern eines besseren belehren
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Transaction auf Änderungen überprüfen

  Alt 6. Dez 2012, 09:44
Wenn ich dich richtig verstehe, würdest du von Datensensitiven Controls abraten, bzw. eine weitere Zwischenschicht zwischen Datenzugriff und Präsentation ziehen?
Jo

Dann wären wir wieder beim leidigen Thema "Wie binde ich dann eine Liste von Objekten einfach an meine GUI?"
Und nimmt mir Delphi da die Arbeit fürs ChangeTracking ab?

Soweit mir bekannt, ist das in Delphi nur mit viel Programmieraufwand möglich.
Der RAD-Ansatz geht meiner Meinung nach dabei flöten... Ich lasse mich aber gern eines besseren belehren
Mal abgesehen von den vielen Schlagworten die Du nutzt, ich hab da kein Problem, meine Daten in ein paar Records und Listen unter zu bringen. Einmal ordentlich definiert, Ruhe für die nächste Zeit.
Eine Gui ist wesentlich aufwendiger.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#10

AW: Transaction auf Änderungen überprüfen

  Alt 6. Dez 2012, 09:49
Kurz nur meine, und nur meine , Meinung...

Ich habe früher auch mit datensensitiven Controls gearbeitet. Es war manchmal ein Krampf es vernünftig zum Laufen zu kriegen je komplexer das ganze wurde. Seit ich die Datensätze als Objekte abbilde (über eine Zwischenschicht) ist es viel einfacher und übersichtlicher. Man kann z.B. in den Objekten Informationen als Properties ablegen welche nicht in der Datenbank stehen.

Einfaches Beispiel:

Früher:
- Query -> DataSource -> DBGrid.
- Änderungen (Edit) an der Query
- zurückschreiben über ApplyUpdates
-> ging nicht bei komplexen Queries die Daten aus verschiedenen Tabellen beinhalten.
-> Transaktionssteuerung teilweise kompliziert bis unmöglich

Heute:
- Query -> DS werden zu Objekten gewandelt -> in generischer Objektlist abgelegt (Zwischenschicht)
- Listview z.B. -> Objekt Properties zur Visualisierung -> Objekt in Data abgelegt (Pointer auf das Objekt in Liste)
- über Data des Listvieweintrages kann man direkt auf das Objekt zugreifen, Properties ändern etc.
- jedes Objekt weiß dann selbst ob es geändert wurde (Property Changed z.B.)
- beim Speichern erledigt die "Zwischenschicht" den Datenbankzugriff und generiert die SQL Statements, Transaktionen etc.
--> Vorteil: Der Listview ist es egal wo die Daten herkommen... aus Datenbank, XML, CSV etc. und ist damit leicht austauschbar (Optik vieleicht)

Der RAD Ansatz geht, wie du schon sagtest, flöten... Ich habe aber das Gefühl, daß man seine Anwendung besser im Griff hat wenn man mit Objekten arbeitet. Der Aufwand ist natürlich höher. Rechnet sich aber je komplexer das wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:04 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