![]() |
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:
IBConnection ist in diesem Fall TpFIBDatabase der Datenbank A.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; Ö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 |
Re: Fibplus Problem mit Transaction
um welche FIBPlus Version reden wir? Und gibts vielleicht noch ein bissl mehr Code? Danke :-)
|
Re: Fibplus Problem mit Transaction
Zitat:
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 |
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 ?
|
Re: Fibplus Problem mit Transaction
Zitat:
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 |
Re: Fibplus Problem mit Transaction
Query.Open = neu Transaction.
wir brauchen TdsAuswahl.Transaction.StartTransaction; machen nicht. |
Re: Fibplus Problem mit Transaction
Zitat:
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 |
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.
|
Re: Fibplus Problem mit Transaction
Hi,
vielleicht muss man noch das poStartTransaction aus den Options nehmen. Frank |
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? |
Re: Fibplus Problem mit Transaction
[quote=MarcoWarm]
Zitat:
Ist die Version 6.8 In diese Richtung geht meine Vermutung, das eine Transaction offen bleibt. Verstehe ohnehin nicht, warum bei bereits geöffneter Transaction noch eine interne Transaction geöffnet wird. Kannst Du mir einen Tip geben, wo ich ändern muss? Mit Gruß Peter |
Re: Fibplus Problem mit Transaction
..aha..
...
Delphi-Quellcode:
...
q.SQL.Text := 'select myfield from mytable';
q.Open; q.edit; q.fields[0].asString := 'Ich moechte das shreiben!'; transaction.start; try q.post; transaction.commit; except transaction.rollback; end; |
Re: Fibplus Problem mit Transaction
Zitat:
Nun gut. Ich hatte eigentlich die Absicht IBObjects mit Fibplus abzulösen, um einige Nachteile dieses Tools zu vermeiden. (Kompatibilität Dataset - Es sind immer 2 DB-Verbindungen notwendig einmal IBObjects und 1 mal Datasetcompatible ) Es ging also in einem Client/Server System sofort an das eingemachte. Um die gewünschte Funktionalität zu erreichen, ist das bereits die dritte Stelle, wo Änderungen im Quellcode von Fibplus notwendig wurden. Ich habe zwischenzeitlich dieses Vorhaben wieder aufgegeben und über ein Sonderangebot das Update auf IBobjects 4.8 gekauft. Mit Gruß Peter Never change a running system |
Re: Fibplus Problem mit Transaction
Zitat:
pFIBDataInfo.pas Zeile 1881 dort fehlt ein Commit der FInternalTransaction. Ich wollte nur nicht, daß jeder daherkommt und seine FIBPlus sourcen ändert... schließlich hat das bei mir nur einen Fehler behoben, der nur sporadisch auftrat und ich kann nicht garantieren, daß die Änderung keine Probleme an einer anderen Stelle macht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz