AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi FIBPlus Transaktions-Problem
Thema durchsuchen
Ansicht
Themen-Optionen

FIBPlus Transaktions-Problem

Ein Thema von spechto · begonnen am 20. Jun 2009 · letzter Beitrag vom 20. Jun 2009
Antwort Antwort
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#1

FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 01:13
Datenbank: Firebird • Version: 2 • Zugriff über: FIBPlus 6
Hallo zusammen,

ich bastele gerade an einer kleinen Anwendung, in der ich ein Fenster mit einem DBGrid habe. Das DBGrid bezieht die Daten aus einem FIBDataset (ReadTransaction, read-only). Nun soll bei einem Doppelklick auf eine Zeile ein Detail-Fenster aufgehen, in dem die Daten bearbeitet werden können. Also übergebe ich dem Detail-Formular die FIBDataset-Komponente in einem Property und nutzte für die Transaktion die WriteTransaction des FIBDataset. So funktioniert das Ganze auch wunderbar.

Nun möchte ich, dass mehrere Instanzen vom Detail-Fenster möglich sind. Leider bekomme ich nun Probleme hinsichtlich des Transaktionskontexts. Wenn im Detail-Fenster die Transaktion gestartet wird und beim Schliessen des Fensters beendet wird, gibt es natürlich Probleme beim Schliessen der nächsten Instanz, da die Transaktion ja bereits beendet wurde.

Wie kann ich dieses Problem am besten (oder besser am saubersten) umgehen? Eine Idee wäre es, zu prüfen, ob die Transaktion bereits läuft und statt eines Hard-Commit einfach CommitRetaining zu nutzen. Das Hard-Commit müsste dann von der ersten Formular-Instanz ausgeführt werden.
Ist das die richtige Richtung, in die ich da Denke oder liege ich mal wieder voll daneben?
Die Write-Transaction wird dadurch natürlich unter Umständen recht lang ...

Vielen Dank
Martin
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 07:19
Zitat:
Nun möchte ich, dass mehrere Instanzen vom Detail-Fenster möglich sind.
Ist das wirklich nötig.
Detailfenster und Transaktionskontext dynamsich erzeugen
Markus Kinzler
  Mit Zitat antworten Zitat
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#3

Re: FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 10:56
Mehrere Instanzen des Detailfensters wären schon sehr schön und würden ein flexibleres Arbeiten ermöglichen. Der Transaktionskontext wird ja von der FIBPlus-Dataset-Komponente mehr oder weniger festgelegt: Eine Read und eine Write-Transaction. Da ich ja dieses Dataset in dem Übersichtsform mit dem DBGrid definiert habe, übergebe ich dieses ja als Property (als Zeiger) an jede Detail-Instanz. Der Ansatz mit dem CommitRetaining würde also nur dann funktionieren, wenn jedes Form kontolliert, ob es das letzte seiner Art ist ...

Ich könnte auch eine eigene Transaktion im Detail-Formular definieren, so dass mit jeder neuen Formular-Instanz eine eigene Transaktion erzeugt wird. Das Problem, welches ich allerdings hierbei erwarte (da schonmal aufgetreten, wenn ich mich recht erinnere), ist das, dass das DBGrid-Form sich nicht automatisch aktualisiert, also die Änderungen der Detail-Forms nicht anzeigt ...

Wäre schön dafür eine Lösung zu finden ... Besten Dank ...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 11:00
Hallo,

deine Lösung mit "pro Form eine Transaktion" würde ich auch nehmen.
Natürlich muss nach dem Detail-Commit die Master-Transaktion neu gestartet werden,
(DataSet.Close, Commit, StartTrans, DataSet.Open)


Heiko
Heiko
  Mit Zitat antworten Zitat
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#5

Re: FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 11:57
Zitat von hoika:
Hallo,
Natürlich muss nach dem Detail-Commit die Master-Transaktion neu gestartet werden,
Heiko
Hallo Heiko,

danke für Deinen Tipp. Der Vorteil bei dieser Variante wäre, dass auch Änderungen anderer CLients sofort sichtbar wären. Ein großer Nachteil wäre aber der Performanceverlust bei langsamen Leitungen zur DB (z.B. DSL VPN-Verbindung). Von daher wäre mir eine Lösung, die die Funktionalität der FIBPlus-Dataset-Kompo nutzt lieber ... was spricht (vom Aufwand mal abgesehen) dagegen? Oder kann man das Performance-Problem anders in den Griff bekommen?

Die andere Frage ist natürlich, ob es überhaupt sinnvoll ist via CommitRetaining über mehrere Detailinstanzen zu arbeiten, oder ob hier die Gefahr besteht, einen Datenverlust zu erleiden, wenn das Hard-Commit aufgrund eines Verbindungsabbruchs (oder Softwarefehler) nicht erfolgt ...

Grüße
Martin
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 12:03
Hallo,

definiere Performanceverlust bei langsamen Leitungen zur DB (z.B. DSL VPN-Verbindung).
Warum soll es dazu kommen ?
Hast du es mal probiert ?

Wenn du natürlich in deinem DBGrid eine grosse Tabelle komplett offen hast (select *),
bist du selber schuld, böse gesagt.

Du kannst das TIL der Main-Trans auf read commited setzen,
dann müsste sollte es schneller gehen.

Ein commit retaining der Detail-Trans macht aber keinen Sinn,
da das Detail-Form doch eh geschlossen wird.
Ausnahme:
Du willst die Original Main-Transaction benutzen.
Davon rate ich ab.


Heiko
Heiko
  Mit Zitat antworten Zitat
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#7

Re: FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 13:45
Zitat von hoika:
definiere Performanceverlust bei langsamen Leitungen zur DB (z.B. DSL VPN-Verbindung).
Bei einer VPN-Verbindung benötigt das Programm circa 9 Sekunden zum Lesen von 80 Datensätzen,
allerdings nur bei der ersten Abfrage. Liegt die Datenbank lokal auf dem Rechner, wird für die
gleiche Aktion weniger als eine Sekunde benötigt. Interessant dabei ist allerdings, dass bei
Verwendung der VPN-Verbindung ein Schließen und erneutes Öffnen der Datenmenge auch
weniger als eine Sekunde benötigt.

Zitat von hoika:
Du kannst das TIL der Main-Trans auf read commited setzen,
dann müsste sollte es schneller gehen.
Habe ich gemacht, ist aber bei den den wenigen Datensätzen nicht spürbar.

Zitat von hoika:
Ein commit retaining der Detail-Trans macht aber keinen Sinn,
da das Detail-Form doch eh geschlossen wird.
Ausnahme:
Du willst die Original Main-Transaction benutzen.
Davon rate ich ab.
Ich wollte die UpdateTransaction der FIBDataset-Komponente aus dem DBGrid nutzten, zum einen,
weil ich mir dann einen erneuten Select Befehl sparen kann und auch beim Schließen des Formulars
die Datenbankverbindung nicht neu initiieren muss. Das Ganze funktioniert auch bei einem
modalen DetailForm hervorragend. Nur bei mehreren Instanzen kommt das CommitRetaining ins
Spiel und das wiederum finde ich auch nicht so schön.

Martin
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 14:42
Hallo,

9 Sekunden ist viel.

Zitat:
allerdings nur bei der ersten Abfrage
Kann es sein, dass da das Connect zur DB
noch mit gerechnet ist ?


Heiko
Heiko
  Mit Zitat antworten Zitat
spechto

Registriert seit: 20. Jun 2009
28 Beiträge
 
Delphi 2007 Professional
 
#9

Re: FIBPlus Transaktions-Problem

  Alt 20. Jun 2009, 14:58
Zitat von hoika:
Hallo,
Kann es sein, dass da das Connect zur DB
noch mit gerechnet ist ?
Hallo Heiko,

denke ich nicht, da die DB zwecks Passwort-Abfrage bereits schon im Vorfeld konnektiert wird.
Wie gesagt, die 9 Sekunden braucht das Programm nur bei einer DSL-VPN-Verbindung (ca. 1 MBit).

Martin
  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 21:40 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