Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ascii-Datei ist fertig geschrieben Test (https://www.delphipraxis.net/44577-ascii-datei-ist-fertig-geschrieben-test.html)

hgiel 21. Apr 2005 06:43


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.

tHeRiAn 21. Apr 2005 07:07

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

hgiel 21. Apr 2005 07:33

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:
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?!
anschließend frage ich - zur Zeit - mit der Funktion

Delphi-Quellcode:
if not IsFileInUse(C:\TEST.TXT) then showmessage('Auswertung ist beendet!!!');
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!

Die IsFileInUse-Funktion lautet:

Delphi-Quellcode:
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;
ich hoffe, daß ich mich nicht zu kompliziert ausgedrückt habe und du es verstehen konntest!

[edit=r_kerber]SQL- und Delphi-Tags eingefügt. Mfg, r_kerber[/edit]

Sharky 21. Apr 2005 07:39

Re: Ascii-Datei ist fertig geschrieben Test
 
Hai hgiel,

evetuell hilft Dir dieser Code aus der Code-Library.
Damit kannst Du ein externes Programm starten und die Ausführung deines Programmes solange anhalten bis der externe Prozess beendet ist.

hgiel 21. Apr 2005 07:59

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 08:53 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