Autor Thema: session.getDatabase  (Gelesen 2527 mal)

Offline CarstenB

  • Aktives Mitglied
  • ***
  • Beiträge: 193
  • Geschlecht: Männlich
session.getDatabase
« 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

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: session.getDatabase
« Antwort #1 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.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline CarstenB

  • Aktives Mitglied
  • ***
  • Beiträge: 193
  • Geschlecht: Männlich
Re: session.getDatabase
« Antwort #2 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.

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: session.getDatabase
« Antwort #3 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

Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

Offline Christian Weiß

  • Junior Mitglied
  • **
  • Beiträge: 61
  • Geschlecht: Männlich
Re: session.getDatabase
« Antwort #4 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.
Gruß

Christian

Offline CarstenB

  • Aktives Mitglied
  • ***
  • Beiträge: 193
  • Geschlecht: Männlich
Re: session.getDatabase
« Antwort #5 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

Offline Gutierrez

  • Aktives Mitglied
  • ***
  • Beiträge: 112
Re: session.getDatabase
« Antwort #6 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

Offline marschul

  • Senior Mitglied
  • ****
  • Beiträge: 280
  • Geschlecht: Männlich
Re: session.getDatabase
« Antwort #7 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 ;)
Gruß
Marco

Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß. (Sokrates)
Keiner ist unnütz, er kann immer noch als schlechtes Beispiel dienen. (unbekannt)

Offline tower

  • Junior Mitglied
  • **
  • Beiträge: 95
  • Geschlecht: Männlich
    • Uwe Schräpler IT-Service
Re: session.getDatabase
« Antwort #8 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 

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz