Domino 9 und frühere Versionen => ND6: Administration & Userprobleme => Thema gestartet von: Stefan5 am 30.04.09 - 10:00:50
Titel: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 10:00:50
Guten Tag Ich muss aus einer Excelliste mit Hyperlinks zu den einzelen Datenbanken ein makro schreiben, welches in der Lage ist festzustellen, ob die Datenbank noch existiert, wie könnte ich das anstellen?
Der Hyperlinks sieht etwa so aus: notes://pdmgxx/pdmgxx/bezeichnung.nsf
Private Function FollowLotusNotes(strLink As String) As Boolean
Dim objLotusNotes As Object Dim Db As Object Dim strHTML As String Dim b As Byte
Set objLotusNotes = CreateObject("Notes.Notessession") Set Db = objLotusNotes.GETDATABASE("", strLink)
Vielen Dank Grüsse Stefan5
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: m3 am 30.04.09 - 10:02:58
Man könnte schaun, ob DB anschließend einen gültigen Wert beinhalted? Bin ich da jetzt bei "Verstehen sie Spaß" oder "Programmieren 101"?
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 10:59:00
Ganz und gar nicht... Wir haben eine Hyperlink auf einer Intranetseite zu diesen einzelnen Datenbank und ich sollte prüfen, ob diese 50 und mehr Links auch wirklich funktionieren. Wird eine Datenbank gelöscht oder ist die Erkennung falsch, kommt im LotusNotes ein entsprechender Hinweis. Die Frage ist, ob es eine Möglichkeit mit VBA gibt, anhand dieser Erkennung (die als Link einwandfrei funktioniert), auch die vorhandene Datenbank zu erkennen? Grüsse Stefan5
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Axel am 30.04.09 - 16:03:27
Nach der Zeile
Set Db = objLotusNotes.GETDATABASE("", strLink)
solltest du mit DB.FilePath den Dateinamen incl. Pfadangabe auslesen können. Damit kannst du mit VBA-Mitteln feststellen, ob es die Datei gibt oder nicht.
Axel
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 16:32:46
Hallo Axel Vielen Dank für den Hinweis. Leider liefert Dein Vorschlag immer das gleiche Resultat, egal ob der strLink korrekt ist oder falsch. Es gibt kein Unterschied. So habe ich es versucht als Beispiel:
Sub Testlauf()
'Korrekter Link If FollowLotusNotes("notes://pdmg20/pdmg20/mailin/Name.nsf") = True Then End If
'Falscher Link If FollowLotusNotes("notes://pdmg20/pdmg20/mailin/NameXXXX.nsf") = True Then End If
End Sub
Private Function FollowLotusNotes(strLink As String) As Boolean
Dim objLotusNotes As Object Dim Db As Object Dim s As String
Set objLotusNotes = CreateObject("Notes.Notessession") Set Db = objLotusNotes.GETDATABASE("", strLink)
If Db.IsOpen = False Then Db.OPENMAIL End If
MsgBox Db.FILEPATH MsgBox Db.FILENAME
Set objLotusNotes = Nothing Set Db = Nothing
End Function
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: pram am 30.04.09 - 16:52:45
was soll denn das:
Code
If Db.IsOpen = False Then
Db.OPENMAIL
End If
???
Ich denke mal du möchtest NotesSession.resolve(url) verwenden...
Gruß Roland
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 17:07:52
Hallo Roland Ok, nehme ich raus, verstehe es zu wenig. Das Resultat ist trotzdem so, dass es einfach den Pfad analog dem strLink anzeigt. Dann bin ich wieder gleichweit? Grüsse Stefan
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: pram am 30.04.09 - 17:56:14
Hallo Stefan,
objLotusNotes.GETDATABASE("", strLink) ist der falsche Weg. (Da die Parameter Server und Filepath sind. Filepath ist KEINE Url. Siehe Noteshilfe)
richtig(er) wäre: set db = objLotusNotes.RESOLVE(strLink) msgbox "DB liegt auf: " + db.server + "!!" + db.filepath
hier muss halt noch ein vernünftiges Errorhandling rum
Gruß Roland
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 30.04.09 - 18:56:03
Hallo zusammen Hallo Roland Vielen Dank für die hilfe. :) Voilà, dass ist exakt, was ich gesucht habe. Genial. Das Errorhandling kriege ich hin. Darf ich noch fragen, ich würde gerne am Anfang der Prozedur (ausserhalb dieser Codeprozedur, in einem anderen Code-Teil) prüfen, ob LotusNotes angemeldet (Passwort) ist, gibt es da auch eine einfache Möglichkeit? Grüsse Stefan ...und nochmals vielen Dank ... das hat mir ein grosses Problem gelöst!
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: pram am 30.04.09 - 22:45:51
Wann kommt denn das PW-Fenster?
Sobald du das NotesSession-Objekt anlegst? Evtl kannst auch ein UIWorkspace-Objekt anlegen ohne dass das Fenster kommt (untested) und dann currentDatabase o.ä. abfragen, worauf du ggf. rückschließen kannst ob der User angemeldet ist.
Alternativ könntest den Befehl "Tasklist" ausführen und Nlnotes.exe suchen. Wenn sie läuft ist der User höchstwahrscheinlich angemeldet.
Evtl gibts aber auch einen DLL-Call o.ä. das man echt überprüfen kann
Gruß Roland
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 01.05.09 - 03:49:19
Hallo Roland
Ich muss etwas ausholen, ich habe eine Excel-Liste mit ca. 800 Links auf Dateien, Verzeichnisse, Internet- und Intranet-Seiten und eben auch LotusNotes-Datenbanken.
Nun habe ich die undankbare Aufgabe gekriegt ein VBA-Prozedur zu schreiben, die in der Lage ist, sämtliche Link-Arten quasi auf Validitiät zu prüfen. Das ist mir nun ordentlich gelungen bei Dateien, Verzeichnisse, Internet- und Intranet-Seiten. Und dank Eurer Hilfe nun sogar für LotusNotes Datenbanken. Die Püfung der Links auf LN Datenbanken ist nur ein "Teilprozedur". Die Prüfung, ob LotusNotes "ansprechbar" ist, müsste ganz am Anfang der Prozedur stehen. Bevor die Überprüfung startet, wird beispielsweise bislang geprüft, ob Internet aktiv ist.
Ich bräuchte also nur eine einfache Lösung (evt. auch mit Error-Handling), dass mir erlaubt den Anwender gleich nach dem Start der Prüfprozedur hinzuweisen, sich im LotusNotes anzumelden, sofern kein Zugriff besteht und dann würde die Prozedur sofort wieder abgebrochen. Das würde vollständig ausreichen. Eine Übergabe des Passwortes oder ähnliches ist nicht notwendig.
Wenn die Prüfung der LN Datenbanken erreicht ist, wäre eine Prüfung des LN Zugriffes bereits zu spät.
... übrigens den Code für LotusNotes konnte ich so lösen:
On Error resume next if IsError(objLotusNotes.RESOLVE(strLink)) = true then .... Else ... End if
Geht ausgezeichnet..... genial ;D
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: eknori am 01.05.09 - 06:24:06
Ich würde es so machen http://www.freevbcode.com/ShowCode.asp?ID=5166. Wenn "Notes" respektive "notes.exe" geladen ist, dann läuft Notes.
Titel: Re: VBA Feststellen, ob Datenbank vorhanden ist
Beitrag von: Stefan5 am 01.05.09 - 22:22:44
Vielen Dank für den Hinweis. Der ist sehr interessant. Ich habe es noch mit dem Computername-API ergänzt und teste mal so. Das könnte mir elegant auch beim InternetExplorer helfen. Genial Grüsse Stefan
Option Explicit
'Computername Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Function IsProcessRunning(strServer, strProcess) Dim Process, strObject IsProcessRunning = False strObject = "winmgmts://" & strServer For Each Process In GetObject(strObject).InstancesOf("win32_process") If UCase(Process.Name) = UCase(strProcess) Then IsProcessRunning = True Exit Function End If Next End Function
Sub TEST()
Dim strComputer As String Dim strProcess As String
Do strProcess = InputBox("Please enter the name of the process (for instance: explorer.exe)", "Input") Loop Until strProcess <> ""
If (IsProcessRunning(strComputer, strProcess) = True) Then MsgBox "Process " & strProcess & " is running on computer " & strComputer Else MsgBox "Process " & strProcess & " is NOT running on computer " & strComputer End If