Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Unerklärliche CPU-Auslastung nach Datenbankspeicherung (https://www.delphipraxis.net/56219-unerklaerliche-cpu-auslastung-nach-datenbankspeicherung.html)

Puddi 2. Nov 2005 13:20

Datenbank: Paradox • Zugriff über: ODBC?

Unerklärliche CPU-Auslastung nach Datenbankspeicherung
 
Ahoi!

Ich hätte folgendes Problem: ich möchte meine Datenbank nach jeder Änderung physisch (d.h. die Post-Methode reicht mir nicht) auf der Festplatte speichern. Dazu wird im AfterPost-Ereignis die folgende Prozedur aufgerufen:

Delphi-Quellcode:
procedure TForm1.Datenbank2Disk(Datenbank: TDataSet);
var LetzterIndex: Word;
begin
  LetzterIndex:=Datenbank.RecNo;
  with Datenbank do
  begin
    Close;
    Open;
    Edit;
    RecNo:=LetzterIndex;
  end;
  // ShowMessage('Trallala.');
end;
Die Variable "LetzterIndex" soll gewährleisten, dass nach der Speicherung wieder auf den letzten Datensatz zurückgesprungen wird. Dies funktioniert soweit alles auch ganz gut.

Problematisch wird es aber, wenn ich im unmittelbaren Anschluss an die with-Anweisung den ShowMessage-Befehl (oder auch andere Befehle) gebe. Das Dialogfenster wird dann nur halbfertig angezeigt (d.h. kein Button vorhanden und wo der Text erscheinen sollte gibt es nur einen weissen Balken). Zudem zeigt der Taskmanager eine Programmauslastung von 98% an und das Programm reagiert nicht mehr. Gebe ich nach dem with-Block innherhalb der Prozedur keine Anweisung mehr, gibt es dieses Problem nicht.

Weiß jemand, woran das liegen könnte? :gruebel:

Bernhard Geyer 2. Nov 2005 13:23

Re: Unerklärliche CPU-Auslastung nach Datenbankspeicherung
 
Ergänz einfach mal ein Application.ProcessMessage vor dem Dialog.

Und vor allem gehst Du wirklich über ODBC und nicht direkt mit der BDE auf die Paradox-Datenbank?

Außerdem ist nicht unbeding gesagt das diese Lösung 100% funktioniert, da das Betriebssystem und die Festplatte ebenfalls noch Caches besitzen und diese du nicht so ohne weiteres "leeren" kannst.

shmia 2. Nov 2005 13:41

Re: Unerklärliche CPU-Auslastung nach Datenbankspeicherung
 
Zitat:

Zitat von Puddi
ich möchte meine Datenbank nach jeder Änderung physisch (d.h. die Post-Methode reicht mir nicht) auf der Festplatte speichern.

Dazu solltest du DbiSaveChanges verwenden.
Damit sind dann deine ganzen Klimmzüge mit Open und Close überflüssig.
http://info.borland.com/devsupport/b...vechanges.html
Übrigens: Paradox ist keine richtige Datenbank, sondern nur eine Ansammlung von Tabellen, die als Dateien gespeichert werden.

supermuckl 2. Nov 2005 13:56

Re: Unerklärliche CPU-Auslastung nach Datenbankspeicherung
 
wird dein showmessage evtl aus einem thread aufgerufen? dann könnte das das problem mit der grafik und cpu auslastung sein

Puddi 2. Nov 2005 16:45

Re: Unerklärliche CPU-Auslastung nach Datenbankspeicherung
 
Zitat:

Zitat von Bernhard Geyer
Und vor allem gehst Du wirklich über ODBC und nicht direkt mit der BDE auf die Paradox-Datenbank?

Jo schulligung, das meinte ich eigentlich auch. Bin noch relativ neu im Geschäft :oops: .

Shmias Vorschlag hat das Problem in der Tat gelöst. Den Aufruf von Application.ProcessMessages hatte ich zuvor auch probiert, der Effekt war jedoch der gleiche (Absturz).

Danke nochmal an alle! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:36 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