Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Spezielle Message, wenn Taskmanager Programm beendet (https://www.delphipraxis.net/155364-spezielle-message-wenn-taskmanager-programm-beendet.html)

Ines 20. Okt 2010 13:34

Spezielle Message, wenn Taskmanager Programm beendet
 
Hallo DP'ler,

gibt es eine spezielle Message, wenn mein Programm vom Taskmanager via "Task beenden" gekillt wird? Bei Task beenden wird noch OnClose ausgeführt, bei "Prozess beenden" wird mein Programm sofort gekillt.

Wird ein Programm gekillt (auf welche Art und Weise auch immer), so bekommt das unsere Datenbank nicht mit. Die Folge: Unnütze Belastung und immer längere Zugriffszeiten. Jetzt schreibe ich in den Programmen, die große Datenmengen von der DB abrufen können ein ini-File, das bei Programmende gelöscht wird.

Allerdings funktioniert das nicht, wenn OnClose auch bei "Task beenden" ausgeführt wird. Deshalb möchte ich wissen, ob der Taskmanager eine spezielle Message an das Programm sendet und wie ich diese auswerten kann.

Mit freundlichen Grüßen
Ines

Delphi 2009
Windows XP
und nur zur Info : Oracle RDB

DeddyH 20. Okt 2010 13:43

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
AFAIK wird da nichts mehr gesendet. Das "Abschießen" per TaskManager ist ja eigentlich nur dazu gedacht, hängende Anwendungen zu beenden. Wer das mit normal laufenden tut, muss halt mit den Konsequenzen leben.

himitsu 20. Okt 2010 13:48

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Die DB muß einfach nur alle Verbindungen über ein Timeout beenden, also auch wenn keine Verbindung mehr besteht.

Ines 20. Okt 2010 14:08

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Hallo,

Zitat:

Zitat von DeddyH (Beitrag 1056713)
AFAIK wird da nichts mehr gesendet. Das "Abschießen" per TaskManager ist ja eigentlich nur dazu gedacht, hängende Anwendungen zu beenden. Wer das mit normal laufenden tut, muss halt mit den Konsequenzen leben.

Wird mein Programm mit "Prozess beenden" abgeschossen, dann springt es nicht mehr auf OnClose. Anders bei "Task beenden". Dort wird noch OnClose ausgeführt. Deshalb bin ich ja der Meinung, daß das Programm unterschiedliche Messages erhält und wollte wissen, ob und wie man diese abfangen kann.

Viele Grüße
Ines

DeddyH 20. Okt 2010 14:12

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Ich habe es nicht ausprobiert, aber dann wird wohl noch eine WM_CLOSE-Message empfangen. Dummerweise kann man daraus aber auch nicht schließen, wer sie geschickt hat. Mitgegeben wird das wohl jedenfalls nicht.
Zitat:

Zitat von MSDN
WM_CLOSE Message
Parameters

wParam

This parameter is not used.
lParam

This parameter is not used.


himitsu 20. Okt 2010 14:16

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
"Task beenden" Sendet der Anwendung eine Message, woraufhin sich das Programm selber beendet.

Beim Anderen wird einfach der Prozess da beendet, ohne daß noch irgendwas ausgeführt wird ... wird der Prozess also "abgeschossen", dann wird nix mehr ausgeführt und demnach KANN ein Programm auch nicht darauf reagieren.


[add]
"Task beenden":
Jemand sagt dir, du mögest dich bitte umbringen (aka beenden).
> Du hast danach noch Zeit ein Testament zu schreiben (aka OnClose und Co.)

"Prozess beenden" / abschießen
Jemand sprengt dich einfach so in die Luft.
> Du kannst nix mehr machen (aka nich mehr auf das Beenden reagieren)

Ines 20. Okt 2010 14:26

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Ich werde gleich morgen mit WM_Close testen, ob ich etwas Brauchbares zustande bekomme.:?
Wird mein Programm ohne Wenn und Aber abgeschossen, dann ist für mich die Welt ja in Ordnung. Wenn es aber selber noch etwas tut, dann funktionert meine Lösung des DB-Problems nicht.

Grüße und Danke
Ines

Luckie 20. Okt 2010 18:23

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
"Prozess beenden" ist dazu da einen ungeliebten oder hängenden Prozess zu beenden. Könnte darauf der Prozess noch reagieren, hätte man keine Möglichkeit einen ungeliebten Prozess sicher zu beenden und man hätte keine Gewalt über seinen Rechner.
Wenn ein Prozess abgeschossen wird, dann muss sich der Benutzer über die Konsequenzen im Klaren sein.

DeddyH 20. Okt 2010 18:26

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Sag ich doch (siehe #2).

Sir Rufo 20. Okt 2010 18:30

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Die Frage ist, was möchtest du erreichen?

Soll die Datei unbedingt gelöscht werden oder die Datenbank-Verbindung getrennt.
Die Anwendung selber kann nichts mehr machen (das ist ja jetzt klar geworden).

Es gäbe aber schon Möglichkeiten dieses zu überwachen.

Die Frage ist nur, wieviel Aufwand möchte man betreiben.

Ines 21. Okt 2010 06:43

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Hallo und guten Morgen!

Zitat:

Zitat von Sir Rufo (Beitrag 1056793)
Die Frage ist, was möchtest du erreichen?

Soll die Datei unbedingt gelöscht werden oder die Datenbank-Verbindung getrennt.
Die Anwendung selber kann nichts mehr machen (das ist ja jetzt klar geworden).

Ich erstellte beim Programmstart ein ini-File. Wird das Programm erneut gestartet und das ini-File besteht noch, dann erhält der Nutzer den Hinweis, seinen Rechner zu booten, außerdem wird das Programm nicht ausgeführt.
Momentan habe ich das Löschen des ini-Files im FormClose untergebracht. Ich ändere mein Programm dahingehend, daß das ini-File beim Klicken auf "Programm beenden" gelöscht wird. Außerdem werde ich den "X"-Button des Formulars unterdrücken. Damit dürfte ich dann auf dem richtigen Weg sein.:?

Der Nutzer soll weiterhin die Möglichkeit haben ein Programm mit dem Taskmanager zu beenden. Allerdings soll er dann anschließend den Rechner booten.

Viele Grüße
Ines

youuu 21. Okt 2010 07:38

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von Ines (Beitrag 1056836)
Außerdem werde ich den "X"-Button des Formulars unterdrücken


Wieso? Das OnClose Ereignis reagiert doch beim Beenden des programms, sei es durch "X"-Button oder sonst wie, (ausgenommen per Taskmanager "Prozess beenden")

Falls das schon geklärt sein sollte, Entschuldige ich ich hab nicht alles gelesen :)

Sir Rufo 21. Okt 2010 08:13

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Man sollte aber vorher noch prüfen ob das Programm noch aktiv ist, sonst startet der User das Programm doppelt und er bekommt den Hinweis, doch bitte den Rechner zu booten.

Was bringt der Neustart des Rechners für die Anwendung?
Also ist es wirklich notwendig den User damit zu nerven?

Ines 21. Okt 2010 09:00

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von youuu (Beitrag 1056841)
Wieso? Das OnClose Ereignis reagiert doch beim Beenden des programms, sei es durch "X"-Button oder sonst wie, (ausgenommen per Taskmanager "Prozess beenden")

Das OnClose-Ereignis wird auch ausgeführt bei Taskmanager - Task beenden.

Zitat:

Zitat von Sir Rufo (Beitrag 1056846)
Was bringt der Neustart des Rechners für die Anwendung?
Also ist es wirklich notwendig den User damit zu nerven?

Aus der VMS-Process-ID (wird beim PC-Start am Server generiert) wird für die Datenbank (und andere Programme) ein interner Account gebildet. Startet der Nutzer eine Abfrage, die ihm zulange dauert und er beendet das Delphi-Programm, so wird dieser interne Account nicht gelöscht und die Abfrage läuft am Server munter weiter.
Bootet der Nutzer allerdings seinen PC, so meldet der Server allen Programmen (und damit auch der Datenbank), daß dieser Nutzer nicht mehr besteht. Abfragen, die noch durchgeführt werden, werden dann von der Datenbank sofort verworfen.
Ich will den Nutzer nicht mehr als nötig nerven. Aber ich reagiere auf die Frage "Warum dauern Abfragen heute so lange" auch allmählich.... :evil:

Viele Grüße
Ines

himitsu 21. Okt 2010 09:19

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dann wäre es doch einfacher dem Server selber zusagen "verwerfe bitte diesen Benutzer", wenn das Programm gestartet wird und vorher nicht korrekt beendet wurde.

Oder sag dem Server er soll alles verwerfen, welches zu alt ist.

Luckie 21. Okt 2010 09:37

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Ich weiß ja nicht wie deine Benutzer an dem Rechner arbeiten, aber wenn das Datenbank-Programm ein essentielles Programm ist, was er unbedingt braucht und er noch andere wichtige Programme auf hat, dann würde mich als Benutzer das neubooten tierisch nerven, weil ich dann alle Programme und Dateien neu starten und öffnen müsste. Und bis ich dann wieder da bin, wo ich vorher war dürfte einige Zeit vergehen und ich wäre, wie schon gesagt, tierisch genervt.

Ines 21. Okt 2010 09:58

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von himitsu (Beitrag 1056860)
Dann wäre es doch einfacher dem Server selber zusagen "verwerfe bitte diesen Benutzer", wenn das Programm gestartet wird und vorher nicht korrekt beendet wurde.
Oder sag dem Server er soll alles verwerfen, welches zu alt ist.

Funktioniert beides nicht, da ich weder die interne Process-ID kenne noch Abfragen von anderen Nutzern stoppen kann (und will) die ein Zeitlimit überschritten haben.

Zitat:

Zitat von Luckie (Beitrag 1056865)
Ich weiß ja nicht wie deine Benutzer an dem Rechner arbeiten.. Und bis ich dann wieder da bin, wo ich vorher war dürfte einige Zeit vergehen und ich wäre, wie schon gesagt, tierisch genervt.

Deshalb suche ich ja nach einer Lösung. Ich lösche mein ini-File, wenn der Nutzer auf "Programm beenden" klickt. Wird das Programm über "Task beenden" beendet, dann erhält er einen Hinweis. Beim Neustart des Programms und vorhandenem ini-File wird das Programm beendet (andere Programme können weiterhin gestartet werden) und der Nutzer hat die Möglichkeit, zu einem späteren, (besseren?) Moment seinen Rechner zu booten.

Ich bin ganz Deiner Meinung: - Booten nervt, - Wiederholtes Aufrufen und Einloggen in ein Programm nervt, allerdings lange Wartezeiten nerven auch.
Und eine einmal abgeschickte Abfrage an den Server kann ich nicht "zurückholen".

Ines

youuu 21. Okt 2010 10:15

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Was sind denn das für Abfragen die so extrem lange dauern sollen?
Über wieviel Datensätze reden wir die aufgelistet werden bei einer Abfrage?

Vielleicht kann man ja dort auch Optimierungen vorschlagen, das der "Kunde" gar nicht erst in Versucng kommt, dein Progamm einfach zu beenden?

Luckie 21. Okt 2010 10:20

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Schreib doch die ProzessID mit in die Ini-Datei. Wenn das Programm neu gestartet wird, ist die ProzessID anders und...

Jetzt habe ich den Faden verloren, was ich für eine Idee hatte. :?

youuu 21. Okt 2010 10:22

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von Luckie (Beitrag 1056885)
Schreib doch die ProzessID mit in die Ini-Datei. Wenn das Programm neu gestartet wird, ist die ProzessID anders und...

Jetzt habe ich den Faden verloren, was ich für eine Idee hatte. :?

WOlltest du etwa sagen: Ist die ProzessID anderst, soll die alte ProzessID beendet werden und die neue gestartet? :roll:

Ines 21. Okt 2010 10:36

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von Luckie (Beitrag 1056885)
Schreib doch die ProzessID mit in die Ini-Datei. Wenn das Programm neu gestartet wird, ist die ProzessID anders und...

Die Process-ID wird von VMS am Server generiert - ich als "kleiner" PC-Nutzer erfahre sie nicht. Außerdem haben PC-Nutzer nicht das Recht am VMS-Server einen laufenden Prozess zu "killen"! Was ist dann mit den anderen Anwendungen, die noch fehlerfrei am PC laufen?

Zitat:

Zitat von youuu (Beitrag 1056882)
Was sind denn das für Abfragen die so extrem lange dauern sollen?
Über wieviel Datensätze reden wir die aufgelistet werden bei einer Abfrage?

Z.B. 160.000 Blobs nach mehreren Stichwörtern durchsuchen und während der Bearbeitung feststellen, daß man sich vertippt hat - die Suche muß nochmals durchgeführt werden.

Ober 350.000 Patienteneinträge sortiert ausgeben lassen - von Aaaaa bis Zzzzz ! Da dauert die Sortierung schon ewig....

Ca. 1.000.000 Leistungssätze nach einem Wert abfragen, der in keinem Index enthalten ist...

Luckie 21. Okt 2010 10:49

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Tut mir Leid, ich habe es vergessen. Aber ich habe es trotzdem gepostet, weil vielleicht andere noch was damit anfangen können.

youuu 21. Okt 2010 11:21

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von Ines (Beitrag 1056890)
Ober 350.000 Patienteneinträge sortiert ausgeben lassen - von Aaaaa bis Zzzzz ! Da dauert die Sortierung schon ewig....

Ca. 1.000.000 Leistungssätze nach einem Wert abfragen, der in keinem Index enthalten ist...


Hm warum kein Index gesetzt? Keinen Zugriff darauf?
Wie lässt du die Patienteneinträge Sortieren?

Ines 21. Okt 2010 11:38

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von youuu (Beitrag 1056903)
Hm warum kein Index gesetzt? Keinen Zugriff darauf?
Wie lässt du die Patienteneinträge Sortieren?

Ein Index ist nicht sinnvoll bei Einträgen, die zu oft vorkommen. Beispiel: Es gibt bei den Leistungssätzen ein Statusfeld mit den Werten :
angemeldet, terminiert, durchgeführt, befundet (numerisch verschlüsselt).
Da die meisten Leistungssätze den Status befundet haben wäre die Datenbank bei einer Änderung des Status mit sich selbst beschäftigt: Von durchgeführt => befundet: Platz für den neuen Indexeintrag schaffen (eventuell neue Pages anlegen, Daten ggf. umspeichern, dann den neuen Indexeintrag ablegen). Beim Optimieren unserer DB (mit Hilfe eines Spezialisten von Oracle) haben wir solche Bottlenecks entfernt.

Die Patienteneinträge sortiere ich mit "order by" im SQL-Kommando.

Ines

youuu 21. Okt 2010 11:56

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Hm, dann die Abfrag vielleicht in einem seperaten Thread laufen lassen, so das sich das Programm nicht aufhängt bei einer längeren Abfrage? Und ggf. einen Abbrech Button, der dann die Verbindung schließt?

Ines 21. Okt 2010 12:09

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Hallo Steven,

Zitat:

Zitat von youuu (Beitrag 1056909)
Hm, dann die Abfrag vielleicht in einem seperaten Thread laufen lassen, so das sich das Programm nicht aufhängt bei einer längeren Abfrage? Und ggf. einen Abbrech Button, der dann die Verbindung schließt?

Das muß ich erst ausprobieren. Mit Threads habe ich fast keine Erfahrung. Allerdings ist mir noch nicht klar was passiert, wenn das Programm am PC (wie auch immer) abgebrochen wird. Der Thread ist ja dann auch Geschichte. Und die Datenbankabfrage läuft munter weiter...

Allerdings werde ich es testen.

Ines

youuu 21. Okt 2010 12:22

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Naja, keiner wird dein programm über den Taskmanager beenden, da es nicht eingefroren ist, daher könnte man dann im OnClose Ereignis einfach die DB Verbindung schließen lassen, falls Sie offen ist.

Korrigiert mich falls ich falsch liege, aber auf den ersten Blick wäre das für mich der einfachste und komfortabelste Weg für dich und den Kunden.

Ines 21. Okt 2010 12:39

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von youuu (Beitrag 1056914)
Korrigiert mich falls ich falsch liege, aber auf den ersten Blick wäre das für mich der einfachste und komfortabelste Weg für dich und den Kunden.

Ich weiß nicht - muß erst noch testen.:wink:

Ines

gmc616 21. Okt 2010 13:17

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von Ines (Beitrag 1056907)
Ein Index ist nicht sinnvoll bei Einträgen, die zu oft vorkommen. Beispiel: Es gibt bei den Leistungssätzen ein Statusfeld mit den Werten :
angemeldet, terminiert, durchgeführt, befundet (numerisch verschlüsselt).
Da die meisten Leistungssätze den Status befundet haben wäre die Datenbank bei einer Änderung des Status mit sich selbst beschäftigt: Von durchgeführt => befundet: Platz für den neuen Indexeintrag schaffen (eventuell neue Pages anlegen, Daten ggf. umspeichern, dann den neuen Indexeintrag ablegen). Beim Optimieren unserer DB (mit Hilfe eines Spezialisten von Oracle) haben wir solche Bottlenecks entfernt.

Das sehe ich anders! Mag durchaus sein, dass beim Einfügen oder Ändern eines Datensatzes die DB länger mit sich selbst beschäftig ist, aber der Vorteil, das Anfragen schneller beantwortet werden (wegen dem definierten Index), überwiegt IMHO den Nachteil.

160.000 Blobs nach mehreren Stichworten zu durchsuchen halte ich nicht für sinnvoll. Besser wäre es evtl. den Inhalt der Blobs mittels Schlagworten in eigenen Tabellen zu indizieren und in diesen Tabellen nach den Stichworten zu suchen.

Ich denke die beste Lösung ist nicht das Programm so zu verbiegen, das es beim "Prozess beenden" oder Neustart irgendwelche DB-Anfragen abbricht oder Verbindungen killt, sondern das DB-Anfragen schnellstmöglich beantwortet werden (auch wenn sich der User vertippt hat) so das der User überhaupt nicht auf die Idee kommt, das Programm abschießen zu wollen.
Meine Meinung!

Ein Tipp: Es macht bei großen Datenmengen durchaus Sinn, die WHERE-Clausel so zu definieren, das möglichst viele Indices angesprochen und genutzt werden können.
Die WHERE-Clausel also mit Bedingungen füllen, die eigentlich irrelevat sind und das Ergebnis nicht beeinflussen. Somit hat aber die DB-Engine die Möglichkeit mehrere Indices zu nutzen. Ein Beispiel fällt mir i.M. nicht ein.

Zitat:

Zitat von youuu (Beitrag 1056914)
Naja, keiner wird dein programm über den Taskmanager beenden, da es nicht eingefroren ist, daher könnte man dann im OnClose Ereignis einfach die DB Verbindung schließen lassen, falls Sie offen ist.

Korrigiert mich falls ich falsch liege, aber auf den ersten Blick wäre das für mich der einfachste und komfortabelste Weg für dich und den Kunden.

OnClose wird nicht ausgelöst, wenn das Programm im Taskmanager per "Prozess beenden" gekillt wird. Aber das hatten wir schon und das ist genau das Problem.

youuu 21. Okt 2010 13:21

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von gmc616 (Beitrag 1056925)
OnClose wird nicht ausgelöst, wenn das Programm im Taskmanager per "Prozess beenden" gekillt wird. Aber das hatten wir schon und das ist genau das Problem.

Und was habe ich gesagt?

Keiner wird einen Prozess beenden, wenn das Programm NICHT eingefroren ist(Abfrage in neuen Thread auslagern), weil man es ganz normal dann über eine Button beendet, welches logischerweise dann OnClose aufruft.

Das würde das Programm dann auch nicht verbiegen, da ich finde bei größeren Aufgaben gehört es sich einfach einen TThread zu benutzen um dem Programm nicht seinen Komfort zu nehmen, in dem es sich deswegen aufhängt.

Desweiteren stimme ich mit dir überein das Indizes als Vorteil "wahrscheinlich" den Nachteil überwiegen werden.

Sir Rufo 21. Okt 2010 13:24

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von gmc616 (Beitrag 1056925)
Zitat:

Zitat von youuu (Beitrag 1056914)
Naja, keiner wird dein programm über den Taskmanager beenden, da es nicht eingefroren ist, daher könnte man dann im OnClose Ereignis einfach die DB Verbindung schließen lassen, falls Sie offen ist.

Korrigiert mich falls ich falsch liege, aber auf den ersten Blick wäre das für mich der einfachste und komfortabelste Weg für dich und den Kunden.

OnClose wird nicht ausgelöst, wenn das Programm im Taskmanager per "Prozess beenden" gekillt wird. Aber das hatten wir schon und das ist genau das Problem.

Der Vorschlag von youuu beruht ja darauf, die Abfrage in einem Thread auszulagern.
Dadurch friert dem User die Anwendung nicht ein und er hat keine Veranlassung die Anwendung per TaskManager abzuschießen.

Somit würden die Fälle, wo das doch passiert erheblich verringert, so dass man dann auch den Umstand des Rechner-Neustarts in Kauf nehmen könnte.

gmc616 21. Okt 2010 13:46

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Ah, Okay, das mit dem Thread haben ich überlesen. Sorry.

Und wer beendet die Threads?
Die Threads warten genauso auf eine Antwort vom DB-Server wie die Anwendung selbst auch. Das Problem, dass das Programm (die DB) immer langsamer läuft, ist damit nicht beseitigt.

Beenden kann ich das Programm noch immer nicht, weil das Programm die Threads nicht beenden kann, da diese noch auf eine Antwort der DB warten.

Also bleibt wieder nur "Prozess beenden".
Und wenn das Programm gekillt wird, werden dann die Threads korrekt beendet?
Ich glaube nicht. Das Problem bleibt das gleiche.

Seht ihr das anders?

youuu 21. Okt 2010 13:54

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von youuu (Beitrag 1056909)
einen Abbrech Button, der dann die Verbindung schließt?

Umgeht dieses Problem, denke ich.

Edit: Dabei fällt mir ein kann man auch im OnClose Ereignis schauen ob noch ein Thread aktive ist und ggf. "killen" und DB Verbindung schließen?

gmc616 21. Okt 2010 14:10

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Bin mir nicht sicher, ob sich eine DB-Verbindung einfach so abbrechen läßt, während noch auf eine Antwort gewartet wird.

Selbst der Abbrech-Button wird erst dann wirken, wenn die Antwort der DB da ist.
Alles Vermutung, müsste man mal testen.
Kommt wahrscheinlich auch auf das eingesetzte DBMS und die verwendeten Delphi-Komponenten an.

Ines 21. Okt 2010 14:41

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von gmc616 (Beitrag 1056925)
Das sehe ich anders! Mag durchaus sein, dass beim Einfügen oder Ändern eines Datensatzes die DB länger mit sich selbst beschäftig ist, aber der Vorteil, das Anfragen schneller beantwortet werden (wegen dem definierten Index), überwiegt IMHO den Nachteil.

160.000 Blobs nach mehreren Stichworten zu durchsuchen halte ich nicht für sinnvoll. Besser wäre es evtl. den Inhalt der Blobs mittels Schlagworten in eigenen Tabellen zu indizieren und in diesen Tabellen nach den Stichworten zu suchen.

1. Es werden mehr Datensätze abgeändert als durchsucht - deshalb nützt mir hier ein Index nichts. Aber ich verwende Indices. Wir haben keine DB-Tabelle ohne Index.
2. In diesen Blogs befinden sich Befunde. Bei jedem Befund müßte der Arzt ein oder mehrere Schlagworte vergeben - da bekommt der Begriff Schlagwort eine neue Bedeutung für mich. Vor Jahren haben wir versucht, eine Struktur mittels Diagnoseschlüssel einzubauen - gescheitert !!:wall:

Zitat:

Bin mir nicht sicher, ob sich eine DB-Verbindung einfach so abbrechen läßt, während noch auf eine Antwort gewartet wird.
Stimmt, erst nach dem 1. gefundenen Satz ist die DB wieder "dialogbereit".
Dann kann ich z.B. die Verarbeitung abbrechen, die Verbindung trennen usw.
Aber solange die DB arbeitet komme ich PC-seitig nicht weiter (nur am Server selbst kann ich den Prozess abschießen).

Ines

youuu 21. Okt 2010 14:53

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Hm dann vielleicht, auch wenn man es eigentlich nicht soll den Prozess mit der DB Abfrage unsanft beenden und dann die DB-Verbindung beenden, beim klick auf den Abbrech Button.

Hab ich zwar noch nie machen müssen, aber ist viellecht eine Option?

gmc616 21. Okt 2010 15:24

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von Ines (Beitrag 1056958)
1. Es werden mehr Datensätze abgeändert als durchsucht - deshalb nützt mir hier ein Index nichts. Aber ich verwende Indices. Wir haben keine DB-Tabelle ohne Index.

Das wiederspricht doch nicht meiner Aussage. Vorteil vs. Nachteil

Zitat:

Zitat von Ines (Beitrag 1056958)
2. In diesen Blogs befinden sich Befunde. Bei jedem Befund müßte der Arzt ein oder mehrere Schlagworte vergeben - da bekommt der Begriff Schlagwort eine neue Bedeutung für mich. Vor Jahren haben wir versucht, eine Struktur mittels Diagnoseschlüssel einzubauen - gescheitert !!:wall:

Die Schlagworte muß doch nicht der Arzt erstellen. Das kann die Anwendung von sich aus tun, oder ein Trigger auf der Befund-Tabelle kann u.U. diesen Job erledigen.

p80286 21. Okt 2010 16:27

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Die Blobs gefallen mir nicht, da gibt es wirklich ekelhafte Laufzeiten.
Alle anderen Anforderungen sollten sich durch geschickte Abfragen, die die zurückgegebenen Daten einschränken auf ein erträgliches Maß reduzieren lassen.
Nach meiner Erfahrung gibt es hier zwei "bottlenecks" zum einen die Datenmenge, die über die Leitung gequält wird, zum anderen das entgegennehmende Programm.
Z.B. Empfangene Daten direkt in ein Stringgrid schreiben ist weder performant, noch "Mengensicher".

Das ursächliche Problem ist ja, daß der Benutzer nicht sieht, das sich etwas tut, und er wohl darum das Programm abschießen will. Also gibt man ihm was er braucht, "action" oder ein augenscheinlich reagierendes Programm (minimieren,maximieren etc)

Gruß
K-H

Ines 22. Okt 2010 07:42

AW: Spezielle Message, wenn Taskmanager Programm beendet
 
Zitat:

Zitat von gmc616 (Beitrag 1056973)
Die Schlagworte muß doch nicht der Arzt erstellen. Das kann die Anwendung von sich aus tun, oder ein Trigger auf der Befund-Tabelle kann u.U. diesen Job erledigen.

Sorry, da muß ich mich erst bei Oracle erkundigen, wie das gehen könnte. Wir verwenden hier eine Oracle RDB die im Gegensatz zu einer Oracle DB verschiedene Funktionen nicht kann/unterstützt.

Bis dahin bleib' ich bei meiner Lösung. Auch wenn das hier einigen Unmut auslösen wird: der Nutzer wird bestimmt vorsichtiger mit dem Abbrechen eines Programmes via Taskmanager sein. Ein Abbrechen "just for fun" wird damit auf jeden Fall verhindert. Bei einigen läuft der Taskmanager generell. Und statt auf "Programm beenden" klickt man dann auf "Task beenden". (viel professioneller :twisted:)

Vielen Dank für Eure Anregungen und Hilfe
Ines


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz