38335
Goto Top

Programm beendet sich nicht richtig in "Geplante Tasks" wenn PC abgemedet ist

Hallo miteinander,

ich habe folgendes Problem:

Mein fertiges und laufendes VB-Programm habe ich in 'Geplante Tasks' geschoben, da es jeden Tag ausgeführt werden muss.

Wenn das Programm durch 'Geplante Tasks' aufgerufen wird, solange der Benutzer, auf dem es läuft, angemeldet ist, läuft es auch einwandfrei.

Allerdings beendet sich der Prozess für das Programm im Task-Manager nicht wenn der Benutzer abgemeldet ist bzw. wenn der PC heruntergefahren ist.

Im Quellcode wird das Programm allerdings ordnungsgemäß automatisch beendet (Unload Form mit anschliessendem End).

Das ist in sofern ein großes Problem, da sich deshalb die Datenbank nicht schliesst, auf welche dieses Programm zugreift. Allerdings nutzen andere Anwender die Datenbank lesend und dann dauert der Zugriff extrem lange.

Bin froh, wenn mir da jemand weiterhelfen könnte.

Content-Key: 45616

Url: https://administrator.de/contentid/45616

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: Pjordorf
Pjordorf 29.11.2006 um 21:49:43 Uhr
Goto Top
Mein fertiges und laufendes VB-Programm habe
ich in 'Geplante Tasks' geschoben, da es
jeden Tag ausgeführt werden muss.

OK

Wenn das Programm durch 'Geplante Tasks'
aufgerufen wird, solange der Benutzer, auf
dem es läuft, angemeldet ist, läuft
es auch einwandfrei.

Also mit dessen anmeldedaten?

Allerdings beendet sich der Prozess für
das Programm im Task-Manager nicht wenn der
Benutzer abgemeldet ist bzw. wenn der PC
heruntergefahren ist.


Also, wenn der PC aus ist, ist auch der Prozess für dein Programm beendet.
Wie stellst du fest, das der Prozess deines Programms noch läuft wenn der Benutzer abgemeldet ist?

Das ist in sofern ein großes Problem,
da sich deshalb die Datenbank nicht
schliesst, auf welche dieses Programm
zugreift.

Gibt es hier keinen Timeout der Datenbank, wenn der Client nicht mehr reagiert? Warum wurde der Datenbankzugriff nicht durch das programm vorher explicit beendet?
Mitglied: 38335
38335 30.11.2006 um 09:56:09 Uhr
Goto Top
Also heruntergefahren wird der PC selten, da das Programm jeden Morgen laufen soll und der PC dazu nicht extra aktiviert werden muss. Nur die Abmeldung des Benutzers findet meistens statt.

Während der PC abgemeldet ist führt sich das Programm auch aus und wird ordnungsgemäß beendet (Verbindung zur Datenbank wird geschlossen, Formulare werden entladen, Programm wird beendet). Allerdings wird nach dem Beenden des Programms die .ldb-Datei für die Datenbank nicht geschlossen, in der die Zugriffsdaten auf die Datenbank stehen.

Wenn ich mich z. B. um 8 Uhr am PC anmelde (Programm läuft morgens um 6 und dauert höchstens 20 Sekunden --> Programm aktualisiert die Daten in der Datenbank) sehe ich, daß die .ldb-Datei für die Datenbank nicht geschlossen wurde (nach dem Schliessen der Datenbank müßte die .ldb-Datei normalerweise gelöscht werden).

Wenn ich nun nach dem Anmelden den Task-Manager aufrufe, sehe ich dass der Prozess für die Anwendung, die um 6 läuft noch aktiv ist, allerdings ist die Anwendung selbst nicht mehr geöffnet. Ich muss manuell den Prozess beenden und erst dann kann ich auch die .ldb-Datei löschen.

Das Verbindungsobjekt der Datenbank wird jedenfalls vor dem Programmende geschlossen. Gibt es eventuell ausserdem eine explizite Anweisung, die die Datenbank schliesst?
Mitglied: Pjordorf
Pjordorf 30.11.2006 um 13:15:32 Uhr
Goto Top
Aha, Datenbank = MSAccess.

solange du eine .ldb hast, gibt es auch einen zugriff auf die MDB/MDE.

Ja, du kannst den Datenbankzugriff beenden. Wie, das hängt von deiner programmierung ab. ADO / RDO / ODBC / ....
Mitglied: 38335
38335 01.12.2006 um 13:56:07 Uhr
Goto Top
Ja, ist ne MSAccess-DB. Hab ich vergessen zu erwähnen.

Also programmiert habe ich den Zugriff mit ADO.

Nur dachte ich bisher, dass der Zugriff mittels

<connection-objekt>.close

auch sauber beendet wird. Die verwendeten Datenbank-Objekte (Tabellen) werden ja vor der Verbindungstrennung im Programm auch sauber geschlossen.

Also auf eine Notlösung wäre ich bisher gekommen: Ich sperre den PC lediglich, damit der Benutzer nicht abgemeldet wird.