Delphi-PRAXiS
Seite 3 von 4     123 4      

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 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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Seite 3 von 4     123 4      

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