Domino 9 und frühere Versionen > ND7: Entwicklung

NotesDatabase-Objekt wird fälschlicherweise auf Nothing gesetzt

(1/2) > >>

Johnson:
Hallo zusammen,

ich habe mal wieder einen komischen Effekt, den ich mir irgendwie nicht erklären kann.

Szenario: Ich bastel an einer Inventurdatenbank, mit der so ziemlich sämtliche Infos zu allen Datenbanken auf allen Servern gesammelt werden. Also gehe ich mit Hilfe des NotesDbDirectory-Objektes alle Datenbanken eines Servers durch. Auch solche, bei denen ich keinen Zugriff habe (das ist auch ok so). Zu allen Datenbanken werden noch zusätzliche Informationen in einer anderen Datenbank gesucht....

Nun zum eigentlichen Problemchen: Bei folgendem Code wird durch die Zeile "Set db2 = s.GetDatabase(s.CurrentDatabase.Server, "names.nsf", False)" das Objekt "db1" auf Nothing gesetzt. Dieser Effekt tritt nur bei Datenbanken auf, bei denen man keinen Zugriff hat. Zum Test habe ich mir eine Datenbank "noaccessdb.nsf" angelegt.

--- Code: ---
Dim db1 As NotesDatabase
Dim db2 As NotesDatabase
Dim dbdir As NotesDbDirectory
Dim s As NotesSession
Dim str_noaccessdb As String

Set s = New NotesSession
Set dbdir = New NotesDbDirectory(s.CurrentDatabase.Server)
str_noaccessdb = "noaccessdb.nsf" ' hier habe ich keinen Zugriff

Set db1 = dbdir.GetFirstDatabase(DATABASE)
Do Until db1 Is Nothing

If db1.FilePath = str_noaccessdb Then

If db1.IsOpen = False Then
On Error 4060 Resume Next
Call db1.Open(db1.Server, db1.FilePath)
If Err = 4060 Then
Print Error
Err = 0
End If
On Error Goto 0
End If

If db1 Is Nothing Then
Msgbox "db1 is nothing"
Else
Msgbox "db1 is NOT nothing"
End If

Set db2 = s.GetDatabase(s.CurrentDatabase.Server, "names.nsf", False)

If db1 Is Nothing Then
Msgbox "db1 is nothing"
Else
Msgbox "db1 is NOT nothing"
End If

End If

Set db1 = dbdir.GetNextDatabase
Loop


--- Ende Code ---

Dat is doch nich normal, oder?


Gruß
Johnson

PS: Ich nutze Notes 7.0.3 auf einer Windows XP SP3 Büchse

Peter Klett:
Merkwürdig. Ich würde s.CurrentDatabase.Server vor der Schleife in einen String schreiben und den dann beim Setzen von db2 verwenden

Set db2 = s.GetDatabase(str_server, "names.nsf", False)

Vielleicht hilfts (nur ein Bauchgefühl und einen Versuch wert)

Peter Klett:
Noch was ganz anderes. Warum setzt Du db2 überhaupt in der Schleife? Ist doch immer die gleiche db, die kannst Du doch schon vor der Schleife definieren

Johnson:
Ja. Wenn man db2 vorher setzt, dann würde es funzten. Nur den Servernamen in eine String-Variable zu schreiben, reicht nicht.

Dieser Test-Code ist natürlich auch nur zum Reproduzieren des Fehlers entstanden. Im eigentlichen Code wurde mit vielen Prozeduren gearbeitet, in denen einer Funktion bisher lediglich eine Datenbank übergeben wurde und diese öffnet die names.nsf, ließt dort ein paar Daten zu dieser Datenbank und gibt einen UDT mit den Daten zurück.
Solange die Datenbank nicht aus einem NotesDbDirectory-Objekt kam, hatte ja alles wunderbar funktioniert.

Aber komisch finde ich das ganze schon. Vor allem sucht man irgendwann schon nach einem Denkfehler.

pram:
Das kommt mir sehr bekannt vor. session.currentDatabase darf nicht als Parameter verwendet werden.

Hatte damals folgendes Problem entdeckt:
http://www-01.ibm.com/support/docview.wss?uid=swg21439472

Gruß
Roland

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln