Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Von TFDIBBackup erzeugte Datei blockiert in AfterExecute (https://www.delphipraxis.net/202873-von-tfdibbackup-erzeugte-datei-blockiert-afterexecute.html)

TurboMagic 17. Dez 2019 16:04

Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC

Von TFDIBBackup erzeugte Datei blockiert in AfterExecute
 
Hallo,

ich versuche gerade mittels Delphi 10.3.2 und TFDIBBackup Komponente ein Backup
einer Firebird 2.5 Datenbank anzufertigen. Das klappt auch soweit, nur ist im
OnAfterExecute Event die erzeugte Backup Datei noch blockiert. Ich würde sie
nämlich gerne mittels

Delphi-Quellcode:
var
  Stream: TFileStream;
begin
  Stream := TFileStream.Create('d:\Test.fbk', fmOpenRead);
Öffnen um deren Inhalt auszulesen und zu verarbeiten.
Die Datei ist auch denn noch blockiert, wenn ich im Event testhalber das
TFDIBBackup freigebe (ja schlechter Stil, ich weiß).

Woran liegt das und was tun?
Einfach das Ganze mittels Timer verzögern ist ja keine wirklich tolle Lösung...

Grüße
TurboMagic

Union 17. Dez 2019 16:26

AW: Von TFDIBBackup erzeugte Datei blockiert in AfterExecute
 
TFDIBBackup kapselt ja nur das IBBackup. Deshalb sollte im OnAfterExecute auch bereits alles beendet sein. Hast Du die Möglichkeit, mit Procmon festzustellen, welcher Process die Datei blockiert (welche Fehlermeldung lässt dich das vermuten)?

Und mir stellt sich die Frage, was du aus einer FBK / GBK Datei auslesen willst?

TurboMagic 17. Dez 2019 16:38

AW: Von TFDIBBackup erzeugte Datei blockiert in AfterExecute
 
Müsste mir in der VM ProcMon erst installieren. Könnte ich versuchen.
Fehlermeldung: die oben geschriebene Codezeile stürzt mit einer Exception ab die
besagt, dass die Datei noch anderweitig geöffnet ist.

TurboMagic 17. Dez 2019 17:17

AW: Von TFDIBBackup erzeugte Datei blockiert in AfterExecute
 
Ok, habe nun den procMon bemüht und bin drauf gekommen was ich falsch mache.
Im Verlauf der Verarbeitung des Streams rufe ich auch eine Routine auf,
welche die Dateigröße der Datei ermitteln soll, was über eine Stream basierte
Variante geschieht, weshalb derselbe Stream erneut geöffnet werden soll.
Leider wurde er aber wohl exklusiv geöffnet.

Jetzt habe ich den Stream mittels fmOpenRead or fmShareDenyWrite geöffnet
und dadurch funktioniert auch die Dateigrößen Routine ohne Absturz!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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