AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie werden Daten speichern

Ein Thema von NoName1 · begonnen am 1. Apr 2019 · letzter Beitrag vom 2. Apr 2019
Antwort Antwort
NoName1

Registriert seit: 8. Mär 2018
194 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie werden Daten speichern

  Alt 1. Apr 2019, 16:46
Datenbank: Interbase • Version: alle • Zugriff über: egal
Guten Tag,
ich habe in einem Buch für Interbase gelesen, dass Daten nur im Rahmen einer Transaktion gespeichert werden können und sollen.
Zur Zeit speicher ich die Daten einzelner Spalten so:
Delphi-Quellcode:
dtmdMain.DoStartTransaction;
 if dtmdMain.arbeitsplan.State in [dsEdit] then
 dtmdMain.arbeitsplan.Post;
 dtmdMain.ibtrnsctnLoge.CommitRetaining;
In der Procedure "dtmMain.DoStartTransaction" geschieht folgendes:
Delphi-Quellcode:
procedure TdtmdMain.DoStartTransaction;
begin
  if not ibtrnsctnLoge.InTransaction then ibtrnsctnLoge.StartTransaction;
end;
Meine Fragen dazu sind folgende:
Ist es nicht sinnvoller die Speicherung so zu implementieren.
Delphi-Quellcode:
  if dtmdMain.arbeitsplan.State in [dsEdit] then
  begin
    dtmdMain.DoStartTransaction;
    dtmdMain.arbeitsplan.Post;
    dtmdMain.ibtrnsctnLoge.CommitRetaining;
  end;
und, wie ist es sinnvoller, wie ist Eurer Verfahren?
Vielen Dank für Eure Hilfen.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.419 Beiträge
 
Delphi 7 Professional
 
#2

AW: Wie werden Daten speichern

  Alt 1. Apr 2019, 17:53
Nein.

'ne Transaktion beginnt man vor dem Ändern von Daten und beendet sie nach dem Ändern von Daten.

War die Änderung korrekt, so wird Commit aufgerufen, war sie nicht korrekt, wird sie mit Rollback verworfen.

Die von Dir zitierte Prozedur prüft nur, ob nicht bereits eine Transaktion geöffnet wurde, damit man sie nicht (beliebig tief) verschachtelt werden, sondern immer nur eine Transaktion zu einer Zeit aktiv ist.

Sinngemäß:
Delphi-Quellcode:
try
  StartTransaction;
  Edit;
  FieldByName('irgendwas').AsString := 'wasweißich';
  ...
  Post;
  Commit;
except
  on e : Exception do begin
    Rollback;
  end;
end;
Mal mit dem Thema Bei Google suchenDatenbank Transaktionshandling auseinandersetzen, und zwar losgelöst von einer konkreten Datenbank und der Implementierung von Delphiroutinen zu einer bestimmten Datenbank.

Also: Zuerst Allgemeinwissen verschaffen, dann an die konkrete Umsetzung gehen.

Und nein, es ist nicht trivial.
Bei Fragen: fragen
  Mit Zitat antworten Zitat
NoName1

Registriert seit: 8. Mär 2018
194 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Wie werden Daten speichern

  Alt 1. Apr 2019, 19:12
Delphi.Natrium,
vielen Dank für die Antwort.
Ich vergas eines zuerwähnen, die Grundlage der Datendarstellung ist ein Formular mit Dantenbankfeldern.
Die Datenbankfelder sind mit einer DataSource verknüpft. Das Formular hat keinen Button über den
die Datenspeicherung erfolgt. Gespeichert wird immer, wenn das Datenbankfeld vererlassen wird (OnExit).
Wenn nun der Wert eines Feldes geändert wurde, dann befindet sich die Datenbank ja im Edit-Modus
und es muss nicht noch nocheinmal nach Edit geprüft werden.

Beispiel:
Delphi-Quellcode:
procedure TMSFMArbeiten.edtSAMMLUNGExit(Sender: TObject);
begin
  SpeicherTageGlobal; // hier wird nun der Code zum Speichern aufgerufen.
end;
Du hast selbstverständlich Recht mit Deinem Code. So speicher ich auch Werte in die Tabelle, wenn ich Daten per Procedure übergebe.

Und wie schon erwähnt, ich vergas etwas zu erwähnen.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.419 Beiträge
 
Delphi 7 Professional
 
#4

AW: Wie werden Daten speichern

  Alt 1. Apr 2019, 19:21
Das ändert doch nichts.

Eingabefelder haben 'ne DataSource. 'ne DataSource hat 'nen DataSet. Ein DataSet hat ein Ereignis BeforeEdit.

Was spricht dagegen, dieses Ereignis zu nutzen und dort die Transaktion zu beginnen?

Weitere Ereignisse können für das Beenden bzw. das Verwerfen der Änderungen genutzt werden.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Wie werden Daten speichern

  Alt 2. Apr 2019, 07:33
Meine Meinung dazu:
explizite clientseitige Transaktionkontrolle macht alles nur anstrengender.
Der mögliche Nutzen entsteht erst, wenn ich Arbeitsabläufe bereitstellen (muss), die über das Editieren von mehr als einem Datensatz hinweg reichen ohne das explizite Commit.
Auch dann kann ich alles DB-seitig belassen, wenn die fragliche Aktion mittels SP umsetzbar ist.
Erst danach brauch ich vielleicht clientseitige Transaktionskontrolle oder vielleicht auch die Frage, ob man seine Arbeitsabläufe / DB Design umstellen sollte.
Gruß, Jo
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#6

AW: Wie werden Daten speichern

  Alt 2. Apr 2019, 08:04
Meine Meinung dazu:
explizite clientseitige Transaktionkontrolle macht alles nur anstrengender.
Es ist nur dann anstrengend, wenn man sich die Datenverbindungen auf der Form zusammenklimpert.

Bei einer vernünftigen Trennung* hat man da keinerlei Probleme.

* Daten von der/den Query/Queries in ein Objekt schreiben, mit dem Objekt arbeiten und dann das Objekt per Statement/s innerhalb einer Transaktion in die Datenbank schreiben.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Wie werden Daten speichern

  Alt 2. Apr 2019, 08:07
Zitat:
* Daten von der/den Query/Queries in ein Objekt schreiben, mit dem Objekt arbeiten und dann das Objekt per Statement/s innerhalb einer Transaktion in die Datenbank schreiben.
+ 1
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Wie werden Daten speichern

  Alt 2. Apr 2019, 08:10
Mit "anstrengend" meinte ich Resourcenintensiv, also weniger die Herangehensweise beim Programmieren.
Der Server verwaltet sowieso Transaktionen und wenn der Client hergeht und das selber "übernimmt", wird es halt "anstrengender" für den Server. Darauf würde ich mich runterhandeln lassen.
Aber damit müssen wir auch nicht den Thread hier sprengen.
Gruß, Jo
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#9

AW: Wie werden Daten speichern

  Alt 2. Apr 2019, 08:17
Mit "anstrengend" meinte ich Resourcenintensiv, also weniger die Herangehensweise beim Programmieren.
Der Server verwaltet sowieso Transaktionen und wenn der Client hergeht und das selber "übernimmt", wird es halt "anstrengender" für den Server. Darauf würde ich mich runterhandeln lassen.
Aber damit müssen wir auch nicht den Thread hier sprengen.
Dann aber auch bitte fachlich korrekt.

Egal wie du mit den Transaktionen umgehst, der Server verwaltet die in jedem Fall. Der Client kann nur sagen, dass die Transaktion für mehrere Statements gelten soll. Der Client übernimmt hier also gar nichts.
  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 12:23 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