Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fibplus Problem mit Transaction (https://www.delphipraxis.net/102635-fibplus-problem-mit-transaction.html)

hanspeter 1. Nov 2007 14:08

Datenbank: Firebird • Zugriff über: Fibplus

Fibplus Problem mit Transaction
 
Hallo,
ich stehe gerade mit Fibplus auf dem Schlauch, vielleicht hat ja wer einen Tip.

In einem TDatamodule habe ich zwei TpFIBDatabase, welche mit völlig unterschiedlichen Datenbanken verbunden sind.

Datenbank A und Datenbank B

Mit dem pFIBDatabase für Datenbank B verbinde ich zur Laufzeit ein TDataset und zeige ein Grid an.
Eine Transaction ist verbunden und wird explizit mit Starttransaction/Commit gesteuert.
Das funktioniert.

Jetzt erzeuge ich zur Laufzeit 2 neue Transactionen und verbinde diese mit der Datenbank A.
Der verwendete Code :

Delphi-Quellcode:
 
  Query   := TpFIBDataset.Create(nil);   { Temporäres Query über die Lebenszeit des Unit }
  Queryint := TpFIBQuery.Create(nil);

  Connection  := IbConnection;

  Transaction := TpFIBTransaction.Create(nil);
  Transaction1 := TpFIBTransaction.Create(nil);
  Transaction.DefaultDatabase := Connection;   // default Transaction.TPBMode := tpbReadCommitted
  Transaction1.DefaultDatabase := Connection;

  Query.Database      := Connection;
  Query.Transaction   := Transaction;

  Queryint.Database   := Connection;
  Queryint.Transaction := Transaction1;
IBConnection ist in diesem Fall TpFIBDatabase der Datenbank A.

Öffne ich jetzt eine der beiden Transactionen und schließe sie mit Commit wieder, dann
funktioniert der oben beschriebene Ablauf für Datenbank B nicht mehr.
Beim Versuch das Dataset zu öffnen kommt die Fehlermeldung Transaction active.
Im Quellcode wird der Fehler beim Versuch eine interne TRansaction zu öffnen, verursacht.

Hat wer einen Tip, wie ich das Problem in den Griff bekomme?

Mit Gruß
Peter

MarcoWarm 1. Nov 2007 14:21

Re: Fibplus Problem mit Transaction
 
um welche FIBPlus Version reden wir? Und gibts vielleicht noch ein bissl mehr Code? Danke :-)

hanspeter 1. Nov 2007 18:23

Re: Fibplus Problem mit Transaction
 
Zitat:

Zitat von MarcoWarm
um welche FIBPlus Version reden wir? Und gibts vielleicht noch ein bissl mehr Code? Danke :-)

Version ist 6.8 und vielmehr Code gibt es eigentlich nicht.
Query ist ein Dataset. Die Transactionen werden zur Laufzeit erzeugt und mit dem Dataset bzw. der Query verbunden.
Wird dieser Construct einmal verwendet, dann funktioniert die Transactionssteuerung für Datenbank B nicht nehr.

Also
Delphi-Quellcode:
 TdsAuswahl.SQLs.SelectSQL.Text := 'Select NR,ABTLG,BEZEICHNUNG FROM PRUEFUNG ORDER BY NR,ABTLG';
 TdsAuswahl.Transaction.StartTransaction;
 TdsAuswahl.Open;

Open (oder auch Prepare) bringt den Fehler Transaction activ.

Gruß Peter

Hansa 1. Nov 2007 18:31

Re: Fibplus Problem mit Transaction
 
Habe auch 2 völlig unabhängige Datenbanken. Deshalb auch je zweimal TFIBDatabase, Transactions. Alles im selben Programm. Ich gehe allerdings nicht hin und erzeuge das, was sowieso gebraucht wird zur Laufzeit. Oder gehts um Turbo Delphi Explorer ?

hanspeter 1. Nov 2007 19:52

Re: Fibplus Problem mit Transaction
 
Zitat:

Zitat von Hansa
Habe auch 2 völlig unabhängige Datenbanken. Deshalb auch je zweimal TFIBDatabase, Transactions. Alles im selben Programm. Ich gehe allerdings nicht hin und erzeuge das, was sowieso gebraucht wird zur Laufzeit. Oder gehts um Turbo Delphi Explorer ?

Nein, das ist ein Tool, was ich bereits unter IBObjects verwendet habe.
Hier werden SQL Anweisungen etwas nutzerfreundlicher aufbereitet.

z.B.
If Select('Select * From Datei') then

oder Update('TableName',['Param1',var1,'Param2',Var2,...],['PID=',primarykey])

oder CopytoVirtualTable('Select * from Datei Where ID<3')
und dann CachedUpdate('Datei','ID',VirtualTable);

Die letzten beiden Anweisungen kopieren eine Datenmenge in ein Virtuelles Memtable und die CachedUpdate-Anweisung
spielt nur die Änderungen zurück.
Das Object verwende ich in fast jeden Programm und unter IBObjects hat es funktioniert.

Gruß
Peter

Valeo Pupsus 1. Nov 2007 20:20

Re: Fibplus Problem mit Transaction
 
Query.Open = neu Transaction.
wir brauchen TdsAuswahl.Transaction.StartTransaction; machen nicht.

hanspeter 2. Nov 2007 06:48

Re: Fibplus Problem mit Transaction
 
Zitat:

Zitat von Valeo Pupsus
Query.Open = neu Transaction.
wir brauchen TdsAuswahl.Transaction.StartTransaction; machen nicht.

Sorry, aber das ist nun mal Unsinn.
Ich möchte eine ganze Reihe von Datenbankaktionen im Kontext einer von mir gestarteten Transaction abarbeiten.
Davon sind mehrere Tabellen betroffen.
Entweder sind die alle erfolgreich, dann Commit oder schlägt auch nur eine der Aufgaben fehl, dann Rollback.
Für Dritte sollen die Änderungen auch erst sichtbar sein, wenn alle Aktionen abgeschlossen sind.
Da die Client - Rechner teilweise im WLan und mobil arbeiten wäre alles andere tödlich.

Der Fehler tritt reproduzierbar so tief im Fibplus auf, das ich inzwischen meine das es ein Bug ist.


Gruß
Peter

mkinzler 2. Nov 2007 06:51

Re: Fibplus Problem mit Transaction
 
Es sieht so aus, als hier eine implizite Tranaktionssteuerung abläuft. Vielleicht gibt es eine Möglichkeit dieses Feature zu deaktivieren.

dataspider 2. Nov 2007 07:10

Re: Fibplus Problem mit Transaction
 
Hi,

vielleicht muss man noch das poStartTransaction aus den Options nehmen.

Frank

MarcoWarm 2. Nov 2007 08:05

Re: Fibplus Problem mit Transaction
 
[quote="hanspeterDer Fehler tritt reproduzierbar so tief im Fibplus auf, das ich inzwischen meine das es ein Bug ist.[/quote]

Deswegen fragte ich nach der Version. Bei unserer 6.8 war ein ähnlicher Fehler vorhanden. Nach einem Prepare blieb eine Transaktion über die Lebenszeit der Anwendung offen (sehr ärgerlich) Ich hab den Fehler in der pFIBDataInfo.pas gefunden. Vielleicht liegt der deinige an einer ähnlichen Stelle?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr.
Seite 1 von 2  1 2      

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