Autor Thema: Öffnen einer Datenbank ohne Berechtigung abfangen  (Gelesen 2835 mal)

Offline ReinerB

  • Junior Mitglied
  • **
  • Beiträge: 93
Hallo Forum,

ich möchte einen Agenten schreiben, der auf einem Server läuft und auf Vorhandensein der Repliken der Mail-DBs prüft.

Ich wollte dazu das Mailverzeichnis Datei für Datei durchgehen und versuchen die gleiche Datei auf dem Backup-Server zu öffnen mit dem Befehl

Dim db2 as New NotesDatabase(back_server, db1.FilePath)

Dann wollte ich mit db2.IsOpen abfragen, ob das Öffnen erfolgreich war. Wenn nicht, ist die Replik nicht vorhanden.

Mein Problem: Wenn der Agent für diese Mail-Datenbank keine Berechtigung hat, dann bricht das Erstellen von db2 ab mit der entsprechenden Fehlermeldung. Das ganze könnte ich mit
"On Error Resume Next"
abfangen, aber dann ist db2 ein vorher erfolgreich erstelltes Objekt und die weitere IsOpen-Abfrage sinnlos.

Wie kann ich dieses Berechtigungsproblem sinnvoll abfangen?
Der Agent soll die Berechtigung für die Mail-DB schon haben. Aber vielleicht hat jemand beim Erstellen vergessen die entsprechenden Berechtigungen zu verteilen. Ich möchte schon wissen, wenn die Berechtigung fehlt und dieses in der Protokoll-Nachricht des Agenten mitgeben, damit die Berechtigung später vergeben wird.

Danke für Tipps.

Grüße
Reiner
« Letzte Änderung: 17.11.05 - 08:57:50 von ReinerB »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Öffnen einer Datenbank ohne Berechtigung abfangen
« Antwort #1 am: 15.11.05 - 12:21:38 »
Um solchen einen speziellen Fehler abzufangen, musst Du an der Stelle, wo er auftreten könnte, Dein ErrorHandling auf eine spezielle Routine umbiegen, anschliessend natürlich wieder zurücksetzen.

      On Error lsERR_NOTES_DBNOACCESS Goto NoAccessError
      Call dbInProcess.Open (dbInProcess.Server, dbInProcess.FilePath)
      If dbInProcess.IsOpen Then
                    ................

Die Fehlerbehandlung:
NoAccessError:
      If Err = lsERR_NOTES_DBNOACCESS Then
         'Reaktion auf Fehler (logging zum Bleistift)
         Err = 0
         Resume GetNextDatabase
      End If
      
GetNextDatabase:
      On Error Goto ErrorRoutine
      'Nächste DB holen
   Wend 'und oben weitermachen ...

HTH,
Bernhard


Offline ReinerB

  • Junior Mitglied
  • **
  • Beiträge: 93
Re: Öffnen einer Datenbank ohne Berechtigung abfangen
« Antwort #2 am: 15.11.05 - 14:03:06 »
Hallo Bernhard,

vielen Dank für deinen Programm-Code.
War genau das, was ich gesucht habe.

Eine Sache habe ich aber noch nicht verstanden.
Warum muß man aus NoAccessError Routine noch "Resume GetNextDatabase" machen?
Ich habe diese Zeile mal weggelassen und das Programm ist einmal in die Fehlerroutine gelaufen und beim nächsten Öffnen einer Datenbank ohne Berechtigung dann nicht nicht mehr und es gab die entsprechende Fehlermeldung. (Diese Zeile "On Error Goto ErrorRoutine" aus der GetNextDatabase Routine habe ich nicht übernommen.)

Reiner

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Öffnen einer Datenbank ohne Berechtigung abfangen
« Antwort #3 am: 15.11.05 - 15:46:37 »
Das "Resume GetNextDatabase" sagt an, wo nach dem Rücksetzen des Fehlerzustandes der Code weiterlaufen soll. Da innerhalb eines Codes ja auch ein ganz anderer Fehler auftreten könnte, wird dann wieder auf das universelle ErrorHandling umgestellt, bis die betreffende Stelle mit der Notwendigkeit des speziellen ErrorHandlings wieder erreicht wird).
Zum Rücksetzen des Fehelrzustands brauchst Du auf jeden Fall ein Resume. Resume Next passt ja aber in diesem Zusammenhang nun gar nicht.

HTH,
Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz