Autor Thema: VBA Feststellen, ob Datenbank vorhanden ist  (Gelesen 6523 mal)

Offline Stefan5

  • Frischling
  • *
  • Beiträge: 22
VBA Feststellen, ob Datenbank vorhanden ist
« 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

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #1 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"?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline Stefan5

  • Frischling
  • *
  • Beiträge: 22
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #2 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

Offline Axel

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #3 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

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Stefan5

  • Frischling
  • *
  • Beiträge: 22
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #4 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


Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #5 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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Stefan5

  • Frischling
  • *
  • Beiträge: 22
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #6 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

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #7 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

Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Stefan5

  • Frischling
  • *
  • Beiträge: 22
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #8 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!

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #9 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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Stefan5

  • Frischling
  • *
  • Beiträge: 22
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #10 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



« Letzte Änderung: 01.05.09 - 03:55:01 von Stefan5 »

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #11 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.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Stefan5

  • Frischling
  • *
  • Beiträge: 22
Re: VBA Feststellen, ob Datenbank vorhanden ist
« Antwort #12 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

    strComputer = String(255, Chr$(0))
    GetComputerName strComputer, 255
    strComputer = Left$(strComputer, InStr(1, strComputer, Chr$(0)))

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

End Sub


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz