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
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]