Ich benutze Paradox und habe im Hauptformular das Tabellenobjekt „TTable“ und greife darauf zu mit „TDataSource“. Im Formular dann steckt ein „TDBCtrlGrid“, das die Datensätze anzeigt und wiederum das „TDataSource“ als Recordsource hat.
Es sind und bleiben genau 18 Datensätze in der Tabelle, die nach einem Prüfablauf beschrieben werden mit aktueller Laufzeit, Prüfanzahl etc. Die Anzeige im Hauptformular wird zyklisch aktualisiert. In einem Editmode (der automatische Betrieb ist währenddessen gestoppt) können von Hand verschiedene Einträge vorgenommen werden, danach mit „Post“ gespeichert und der automatische Prüfablauf wieder gestartet.
Das zyklische Beschreiben wird von einem weiteren Formular aus vorgenommen, in dem die gesamte Prüfroutine enthalten ist. Dort sind ebenfalls die Elemente „TTable“ und „TDataSource“ enthalten um direkten Zugriff auf die Daten zu haben.
Das Ganze läuft im Dauerbetrieb und funktioniert tadellos, solange nichts dazwischenkommt. Schmiert der PC nun ab, sind sämtliche Daten zurückgesetzt auf alte Werte. Das habe ich versucht abzufangen, indem ich die Tabelle nach jedem Zyklus wegkopiere, was nur leidlich funktioniert.
Nun habe ich auch oben beschriebenen Effekt bemerkt, wenn ich nicht die Laufzeitversion (EXE) starte, sondern im Debugmode bzw. unter Delphi.
Habe ich hier einen Denkfehler gemacht oder etwas vergessen?
Die zyklische Anzeige-Aktualisierung im Hauptformular:
// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
// TableAnmeldungCalcFields
// Funktion: Feldberechnungen
// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
procedure TF\_T10\_SZP\_Main.Anmeldung\_TableCalcFields(DataSet: TDataSet);
var
b\_ : byte;
d\_datetime1 : double;
d\_datetime2 : double;
begin
d\_datetime1 := now();
if Anmeldung\_Table['Start'] null then
begin
d\_datetime2 := Anmeldung\_Table['Start'] ;
if d\_datetime2 0 then
begin
Anmeldung\_Table['Restzeit'] := F\_T10\_SZP\_Tools.stundenanzeige((d\_datetime2 - d\_datetime1 + (pruefzeit/24)));
end;
end;
end;
Die Tabellen-Aktualisierung im „Prüfformular“:
// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
// procedure Speichern\_ButtonClick
// Funktion: Prüfdaten speichern
// \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
procedure TF\_T10\_SZP\_Prf.Speichern\_ButtonClick(Sender: TObject);
var
b\_ : byte;
s\_ : ShortString;
begin
// Anmeldedaten
Anmeldung\_Table.Active := true;
Anmeldung\_Table.Locate('ID', strtoint(ps1edit.text), [loCaseInsensitive]);
Anmeldung\_Table.Edit;
if Anmeldung\_Table['Anmeldung'] = true then
begin
// nur speichern, wenn auch angemeldet
Anmeldung\_Table['Pruefanzahl'] := Anmeldung\_Table['Pruefanzahl'] + 1;
s\_ := Anmeldung\_Table['Typ'];
if b\_gesamtfehler 0 then
begin
Anmeldung\_Table['Fehler'] := Anmeldung\_Table['Fehler'] + 1;
end;
Anmeldung\_Table.post;
end;
Anmeldung\_Table.Active := false
end;