![]() |
Ascii-Datei ist fertig geschrieben Test
Hallo,
ich habe folgendes Problem: In meinem Programm wird im Verlaufe einer Datenbankabfrage im Hintergrund eine Ascii-Datei erzeugt und mit Daten vollgeschrieben. Ich möchte dem Anwender nun einen Hinweis (showmessage) geben wenn die Auswertung beendet wurde, d.h. die Ascii-Datei fertig/voll geschrieben wurde also nicht mehr in Benutzung ist, und erst dannach weitere Anwendereingaben zulassen. |
Re: Ascii-Datei ist fertig geschrieben Test
Moin Moin,
deine Frage lautet bestimmt, wie du es schaffst, zu merken wenn die Datei "Voll" ist... läuft denn bei dir, oder in deiner Auswertung eine Funktion durch welche in die Datei schreibt? gib mal ein wenig mehr Stoff wie du das genau machst... gruss sven |
Re: Ascii-Datei ist fertig geschrieben Test
ich starte in meinem Programm per ShellExecute eine DOS-Batch, in der eine Oracle-SQL-Abfrage gestartet wird
// Oracle-Auswertung starten ExecuteShellCommand(tmp_pfad+'\diff.bat',true); // true -> Fenster unsichtbar!!! Das SQL-Skript welches per Batchaufruf gestartet wird und in welchem per SPOOL-Befehl die ASCII-Datei erzeugt wird sieht so aus:
SQL-Code:
anschließend frage ich - zur Zeit - mit der Funktion
spool c:\test.txt
set linesize 120 set pagesize 0 select dabr.dinr$, dabr.dabf$, dabr.tchf$, sum (dabr.umsatzgpr#), diff.dtdf$,sum (diff.vk), diff.arti$,diff.text, diff.kommentar from vkabdabr dabr, vkabddff diff where dabr.dabf$ between '01.01.05' and '31.01.05' and dabr.dabr$$ between '1000000000' and '1099999999' and diff.dabr$=dabr.dabr$$ group by dabr.dinr$, dabr.dabf$, dabr.tchf$, diff.dtdf$,diff.dffa$, diff.arti$, diff.text, diff.kommentar order by dabf$, dinr spool off exit // Oracle-Instanz wird beendet und ASCII-Datei C:\test.txt sollte geschrieben sein?!
Delphi-Quellcode:
den Status der Ascii-Datei ab. Leider wird immer SOFORT die Meldung - Auswertung ist beendet!!! - ausgegeben. Die ASCII-Datei wurde anelegt ist aber noch nicht voll und somit sollte die Meldung erst ein wenig später erscheinen!
if not IsFileInUse(C:\TEST.TXT) then showmessage('Auswertung ist beendet!!!');
Die IsFileInUse-Funktion lautet:
Delphi-Quellcode:
ich hoffe, daß ich mich nicht zu kompliziert ausgedrückt habe und du es verstehen konntest!
function IsFileInUse(fName : string) : boolean;
var HFileRes : HFILE; begin Result := false; if not FileExists(fName) then exit; HFileRes := CreateFile(pchar(fName), GENERIC_READ or GENERIC_WRITE, 0 {this is the trick!}, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); Result := (HFileRes = INVALID_HANDLE_VALUE); if not Result then CloseHandle(HFileRes); end; [edit=r_kerber]SQL- und Delphi-Tags eingefügt. Mfg, r_kerber[/edit] |
Re: Ascii-Datei ist fertig geschrieben Test
Hai hgiel,
evetuell hilft Dir dieser ![]() Damit kannst Du ein externes Programm starten und die Ausführung deines Programmes solange anhalten bis der externe Prozess beendet ist. |
Re: Ascii-Datei ist fertig geschrieben Test
super - hat geklappt!
Vielen Dank für den Tip :bounce1: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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