Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: CarstenB am 08.03.12 - 09:06:33

Titel: session.getDatabase
Beitrag von: CarstenB am 08.03.12 - 09:06:33
Moin zusammen,
ich habe folgendes Problem: Im Querysave wird auf eine andere DB zugegriffen. Das Objekt wird über session.getDatabase erstellt. Ein Kollege hat keine Zugriffsrechte auf diese DB und es kommt zur Fehlermeldung:

   Benutzer xxx kann Datenbank yyy nicht öffnen

Laut Hilfe sollte eigentlich eine Database Objekt zurückkommen
   If the database cannot be opened and createonfail is True or omitted, IsOpen is false for the NotesDatabase object.
aber der Fehler passiert direkt bei Session.getDatabase. Ich hätte erwartet, das ich ein database Objekt zurückbekomme, wo ich dann im Anschluss per isopen überprüfen kann, ob tatsächlich Zugriffsrechte vorhanden sind

Was läuft falsch?
Vielen Dank im Voraus
Carsten
Titel: Re: session.getDatabase
Beitrag von: Thomas Schulte am 08.03.12 - 09:10:01
Nix, das läuft tatsächlich so ab. Du musst also den Fehler direkt im Error Handling abfangen.
Titel: Re: session.getDatabase
Beitrag von: CarstenB am 08.03.12 - 09:21:02
Danke, Thomas, für die schnelle Antwort.
Ich hatte auch schon versucht, ob sich db = New NotesDatabase anders verhält, aber da besteht das gleiche Problem

Dann ist aber die Notes-Hilfe falsch oder unverständlich.
Titel: Re: session.getDatabase
Beitrag von: marschul am 08.03.12 - 10:47:24
Vielleicht einen Versuch wert (ohne jetzt getestet zu haben, wie sich das bei fehlendem Zugriff verhält):

Code
Dim oSourceDB As New NotesDatabase("", "")
If Not oSourceDB.Open(server, filepath) Then 
 eigene Fehlermeldung
Else
 ...
End If

Titel: Re: session.getDatabase
Beitrag von: Christian Weiß am 10.03.12 - 19:15:27
Ich glaube das Notes hier so etwas wie eine Dummy-Datenbank erstellt.
Diese Beobachtung haben wir zumindest bei uns in der Firma gemacht.
Wir machen es jetzt so, dass wir dann immer abfragen, ob die Datenbank einen Titel hat.
Wenn nicht, dann wissen wir, dass die zurückgegebene Datenbank keine richtige Datenbank ist und können dann entsprechend darauf reagieren.
Titel: Re: session.getDatabase
Beitrag von: CarstenB am 12.03.12 - 09:35:01
Vielleicht einen Versuch wert (ohne jetzt getestet zu haben, wie sich das bei fehlendem Zugriff verhält):

Code
Dim oSourceDB As New NotesDatabase("", "")
If Not oSourceDB.Open(server, filepath) Then 
 eigene Fehlermeldung
Else
 ...
End If



nein, das funktioniert auch nicht. Egal wie man es macht, man muss den Fehlercode (4060) im ErrorHandling behandeln
Titel: Re: session.getDatabase
Beitrag von: Gutierrez am 12.03.12 - 10:33:26
Moin,

also ich finde es total logisch, dass Fehler 4060 kommt und kein leeres Datenbank-Objekt. Zumindest zeigt der Fehler, dass die angegebene Datenbank vorhanden ist und theoretisch geöffnet werden kann. Z.B. gibt es auch nen Fehler, wenn die DB inkonsistent ist - dann kann sie auch nicht geöffnet werden, aber es müsste ebenfalls ein Notes-Fehler kommen und nicht nur IsOpen = False sein, wie aus der Hilfe gedeutet wird.

Grüße
Gutierrez
Titel: Re: session.getDatabase
Beitrag von: marschul am 12.03.12 - 15:16:56
Vielleicht einen Versuch wert (ohne jetzt getestet zu haben, wie sich das bei fehlendem Zugriff verhält):

Code
Dim oSourceDB As New NotesDatabase("", "")
If Not oSourceDB.Open(server, filepath) Then 
 eigene Fehlermeldung
Else
 ...
End If

nein, das funktioniert auch nicht. Egal wie man es macht, man muss den Fehlercode (4060) im ErrorHandling behandeln

Gut zu wissen - jetzt weiß ich, was ich nachzubessern habe, wenn mal Flaute herrscht ;)
Titel: Re: session.getDatabase
Beitrag von: tower am 13.03.12 - 08:55:15
Hier meine Variante, das Problem zu lösen

Code
Function dbopen (sserver As String, sfile As String, db As NotesDatabase) As Variant
	On Error Goto errorhandler
	dbopen = False
	Set db = New NotesDatabase(sserver, sfile)
	dbopen = db.IsOpen
	Exit Function
errorhandler:
	If Err <> 4060 Then
		' Log schreiben, irgendwas ist schief gelaufen			
	End If
End Function