Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Schocke am 17.12.04 - 11:37:11
-
hallo,
habe folgendes Problem:
ich öffne meine Mailbox mit um dort direkt Mails hineinzuschreiben mit
Dim mailbox As New NotesDatabase("","")
Dim current As NotesDatabase
Set current = session.CurrentDatabase
Call mailbox.Open( current.server, "mail.box" )
und schreibe dann meine werte hinein und schicke die Mail ab.
Dasganze funktioniert auch ohne Probleme, nur die ganze geschichte läuft in einer Schleife. Wird die Schleife noch einmal durchlaufen und es kommt noch einmal zu dem Aufruf
Call mailbox.Open( current.server, "mail.box" )
knallt es weil er mir erzählt das die Mailbox schon geöffent ist, was mir auch einleuchtet .
Nur wie schließe ich die geöffnete Datenbank wieder ?
Finde einfach keine Methode dafür in der Hilfe.
Wie gesagt
Call mailbox.Open
Call mailbox.Close ?????????
-
Frage vorher mit NotesDatabase.IsOpen den Status der DB ab.
HTH,
Bernhard
-
ok so funktionierts ;)
aber die Datebank zur laufzeit wieder freigeben geht demnach nicht oder ?
-
Die DB "freizugeben" ist nicht erforderlich. Du müsstest das DB-Objekt von seinem Bezug befreien, z.B. durch Set NotesDatabase = Nothing.
In Deinem Fall ist das aber unnötig - warum solltest Du einen Objektbezug zerstören, wenn Du ihn in der Schleife doch noch weiterhin benötigst ?
HTH,
Bernhard
-
.. und wenn man die Variable auch noch gleich "entsorgen" will, dann
Delete NotesDatabase
... was nicht die DB löscht, sondern "nur" die Objekt-Variable
-
@Bernhard
da gebe ich dir vollkommen recht das DB-Objekt in der Schleife Killen macht keinen Sinn, nur wie sieht es außerhalb der Schleife aus ? Ich programmiere an einem Agent der Periodisch gestartet wird, und ich möchte nicht das der Agent mir meinen Arbeitsspeicher "auffrisst",
oder werden die Objekte automatisch beim beenden des Agents wieder freigegeben ?
-
Natürlich werden die Objekte beim Beenden freigegeben, das wäre sonst ganz katastrophal. Irgendwo in der Hilfe sollte eigentlich ein Abschnitt sein, der den Scope einer Variablen beschreibt, such mal danach.
-
wollte nur mal nachfragen in Delphi musste alles wieder freigegeben werden ansonsten hast du ein Problem
-
Nicht, wenn Du das Programm ganz am Schluss verlässt, und nicht, wenn Du ein Objekt hast, das ein Parent-Objekt hat. Das Beenden des Agenten entspricht dem Verlassen des Programmes bei Delphi. Das Problem eines Memory-Leaks innerhalb der Agenten-Ausführung lässt sich auch provozieren, insbesondere beim Erstellen eigener Klassen.
-
Sorry da habe ich mich verkehrt ausgedrückt. Natürlich wird beim beenden des Delphiprogramms alles wieder ohne das es explizit gesagt wird freigegeben, nur wenn du einen Service programmierst ist das tödlich (außer Du willst ihn andauernd neu starten).
Naja wenn das beenden eines Agent gleichbedeutent mit dem beenden eines Programms ist dann brauch ich mir keine Sorgen zu machen :)
-
Ja klar, Service beendet sich nicht. Das ist aber wieder nicht vergleichbar mit einem Agenten, die vergleichbare Stuktur hier wäre ein Servertask, aber den kann man mit LS nicht schreiben.
-
dann ist das ja geklärt ;)