Autor Beitrag
ibh_compucat
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Do 27.02.03 13:41 
Guten Tag Allesamt,

ich kämpfe seit langer Zeit mit einem Phänomen: bei dem Versuch, eine Paradoxtabelle zu entleeren bekomme ich in erschreckend kurzen Abständen (nach ca. 40-50 Versuchen) Programmabstürze und zwar obwohl alles in try - except Blöcken stattfindet:
ausblenden volle Höhe Quelltext
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:
          Verz:= ExtractFilePath(ParamStr(0));
          OeffnenFehlgeschlagen := true;
          i := 0;

          repeat
            inc(i);

// Tabelle schließen:

            Form2.Table1.Active:= false;[b]
            try
              [/b]Verz:= ExtractFilePath(ParamStr(0));
              Form2.Table1.DatabaseName:= Verz;
              Form2.Table1.TableName:= 'TEMP\SFPT.DB';
              Form2.Table1.TableType:= ttParadox;
              Form2.Table1.Exclusive:= true;
// Tabelle entleeren:
              Form2.Table1.EmptyTable;
              Form2.Table1.Active:= false;
              Form2.Table1.Exclusive:= false;
              Form2.Table1.close;

              Form2.Table1.DatabaseName:= Verz;
              Form2.Table1.TableName:= 'TEMP\SFPT.db';
// Versuch, leere Tabelle zu öffnen
              Form2.Table1.Active:= true;

              OeffnenFehlgeschlagen := false;

            except
// wenn Versuch fehlgeschlagen, dann Kopierversuch:

              Form2.Table1.close;
              Form2.Table1.Exclusive:= false;
              OeffnenFehlgeschlagen := true;
              if FileExists('TEMP\SFPT.DB') then DeleteFile('TEMP\SFPT.DB');
              CopyFile('TEMP\SFPTStruktur.DB','TEMP\SFPT.DB', false);
              warte5Sekunden;
            end;
          until NOT (OeffnenFehlgeschlagen) OR (i >= 50);

Spätestens nach dem zweiten erfolglosen repeatschleifendurchlauf stürzt das Programm ab auf den Desktop, und das verstehe ich garnicht wegen try und except.

Wenn mir da jemand weiterhelfen könnte....

Gruß ihb_compucat

Moderiert von user profile iconTino: Code-Tags hinzugefügt.
derDoc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 623

Win Vista Prof
D2007 Prof
BeitragVerfasst: Do 27.02.03 20:02 
Wieso benutzt du denn eine repeat-Schleife? Und was willst du im except-Block machen? Ich sehe ein Problem: wenn dein try-Block fehlschlägt, wird er nach dem 50. Durchlauf immer noch nicht funktionieren.

_________________
MfG derDoc
There are only 10 types of people: those who understand binary and those who don't.
ibh_compucat Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 130

Win 2000, Win 8.1
D6, Ent. XE5 Ent.
BeitragVerfasst: Fr 28.02.03 11:01 
Hallo derDoc,

der Sinn der Repeatschleife ist folgender:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
i := 0;
repeat
 
  try

    inc(i);

    Tabelle leeren
    Tabelle öffnen

  except
   
    falls Fehler beim Öffnen:
    Tabellenstruktur einer leeren Hilfstabelle über die Tabelle kopieren
    dann 5 sekunden warten und nochmal versuchen
 
 end;

until (leere Tabelle fehlerfrei geöffnet) OR ( i > 50);


d.h. im Normalfall wird die Tabelle geleert und läßt sich dann öffnen,
nur im Fehlerfall wird die Tabelle durch den Inhalt einer Hilfstabelle überschrieben und die Öffnungsprozedur nochmal durchlaufen.

Kann es sein, daß ein Fehler auftritt, wenn eine leere Tabelle nochmal versucht wird zu leeren?

Aber auch die Repeatschleife wird nicht 50 mal durchlaufen, sondern nach dem 2. - 3. Durchlauf stürzt das Programm auf den Desktop ab, was ja eigentlich nicht sein kann, es ist aber so.

Schlimm ist dabei, daß ich diese leere Tabelle für den weiteren Programmablauf unbedingt benötige, ich kann also nicht einfach mit einer Fehlermeldung das Programm abbrechen, weil mir dann wichtige bis dahin gesammelte Daten verlorengehen.

Daher meine Verzweiflung, ich weiß nicht, wie ich das in den Griff bekomme.

Gruß ibh_compucat