Hallo Freunde,
kann es sein, dass doch nicht alles so ist wie früher???? Bei folgendem Programmblock kommt es oft zur Exeption, obwohl ich mir keiner Schuld bewusst bin:
zuerst lösche ich in einem Transferpufferverzeichnis eine (alte) (Paradox-Tabelle) Datei, falls noch vorhanden:  
Ausgangspunkt: meine aktuelle Datei ('TEMP\KUNDE.DB') soll in ein Tabellenpufferverzeichnis ('DEBITOREN\') kopiert werden und anschließend dort geöffnet werden:
												| 1:2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
 21:
 22:
 23:
 24:
 25:
 26:
 27:
 28:
 29:
 30:
 31:
 32:
 33:
 34:
 35:
 36:
 37:
 38:
 39:
 40:
 41:
 42:
 43:
 44:
 45:
 46:
 47:
 48:
 49:
 50:
 51:
 52:
 53:
 54:
 55:
 56:
 57:
 58:
 59:
 60:
 61:
 62:
 63:
 64:
 65:
 66:
 67:
 68:
 69:
 70:
 71:
 72:
 73:
 74:
 75:
 76:
 
 |     Dateiname := 'DEBITOREN\KUNDE.DB; // zum Beispiel   
 // falls eine alte Tabelle vorhanden, soll sie gelöscht werden:
 
 if FileExists(Dateiname) then DeleteFile(Dateiname);
 
 // dann kopiere ich eine aktuelle Datei dorthin, wobei DEBITOREN ein
 // Tabellenpuffer ist, d.h. es können mehrere Tabellen dort sein für
 // einen Transfer in ein endgültiges Verzeichnis:
 
 CopyFile('TEMP\KUNDE.DB', PChar(Dateiname), false);
 
 // dann erfolgt die Abfrage, ob das Zielverzeichnis (auf einem Novell-
 // Server) existiert:
 
 HS := 'F:\BUCHHALTUNG\DEBITOREN\';
 if DirExists(HS) then  // vorsichtshalber prüfen, ob Zielverzeichnis existiert
 begin
 
 // nun versuche ich, die erste zu übertragende Tabelle  im Tabellenpuffer zu öffnen:
 
 if FindFirst('DEBITOREN\*.db', faAnyFile, SearchRec) = 0 then
 
 repeat
 with SearchRec do
 begin
 Dateiname := Name;
 KundenNr := Copy(Dateiname, 1, Pos('.', Dateiname)-1);
 if (Name <> '.') AND (Name <> '..') then
 begin
 if copy(Dateiname, Pos('.', Dateiname)+1, 2) = 'db' then
 begin
 
 // Eintrag (zu kopierende Paradox Tabelle) gefunden
 
 i := 0;
 gefunden := false;
 
 // Versuch, die Tabelle zu öffnen:
 
 repeat   // weil meistens der erste Versuch zu öffnen scheitert, warum?
 Form1.Table1.Active:= false;
 Form1.Table1.close;
 Verz:= ExtractFilePath(ParamStr(0));
 try
 Form1.Table1.DatabaseName:= Verz;
 Form1.Table1.TableName:= 'DEBITOREN\' + Dateiname;
 if FileExists(Form1.Table1.TableName) then
 begin
 // an dieser Stelle, wenn die Table auf active = true gesetzt wird,
 // entsteht sehr häufig eine Exception:
 Form1.Table1.Active:= true;
 Form1.Table1.First;
 gefunden := true;
 end;
 except
 gefunden := false;
 inc(i);
 end;
 until (gefunden) OR (i > 10);
 
 if gefunden then
 begin
 
 //                ..... weitere Auswertung
 
 end;
 
 end;
 end;
 end;
 until FindNext(SearchRec) <> 0;
 
 FindClose(SearchRec);
 
 end;
 | 
		
	  
Wenn der Versuch scheitert, die Tabelle zu öffnen, kann natürlich nichts ausgewertet werden und die Datei bleibt im Tabellenpuffer, bis zur nächsten Übertragung. Da die Übertragung beim nächsten Durchlauf meistens klappt, vermute ich Laufzeitprobleme mit dem Betriebssystem. Kann es vielleicht sein, daß der Copy-Befehl an die API von Windows NT ausgegeben wird und mein Delphi-Programm schon weitermacht, so daß zum Zeitpunkt, wenn die Table.active auf true gesetzt wird, die Datei noch gar nicht fertigkopiert ist? Ich finde alleine keine andere Erklärung, weiß jemand von euch Datenbank-Profis was darüber? Wäre toll, Danke.
euer
ibh_compucat