Autor Thema: "Set db" anhand der ReplicaID  (Gelesen 5885 mal)

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
"Set db" anhand der ReplicaID
« am: 08.10.08 - 16:34:39 »
Hallo,

ich habe in mehreren Dokumenten eine ReplicaID einer bestehenden Datenbank.
Anhand dieser ReplicaID möchte ich den Pfad und den Titel der Datenbank auslesen.

mit

OpenDatabaseByReplicaID

und

OpenByReplicaID

bin ich bislang gescheitert. hat jemand noch eine andere Idee

Driri

  • Gast
Re: "Set db" anhand der ReplicaID
« Antwort #1 am: 08.10.08 - 16:56:06 »
Der Trick besteht darin, das NotesDatabase-Objekt vorher mit New zu deklarieren.

Also so in etwa :

Zitat
Dim db As New NotesDatabase("","")
Call db.OpenByReplicaID("Server", "ReplicaID")

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: "Set db" anhand der ReplicaID
« Antwort #2 am: 08.10.08 - 19:11:10 »
bin ich bislang gescheitert. hat jemand noch eine andere Idee

Vielleicht, aber nur wenn du uns verrätst wo du gescheitert bist. ´


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

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #3 am: 09.10.08 - 09:15:52 »

Ich erhalte diese Fehlermeldung:

Variant does not contain an object

Das ist mein Code:

Sub Click(Source As Button)
   
   Dim s As New NotesSession
   Dim directory As NotesDbDirectory
   Dim db As New NotesDatabase("","")
   Dim repID As String
   Dim server As String
   
   Dim CGdb As NotesDatabase
   Dim CGview As NotesView   
   Dim CGdoc As NotesDocument
   
   Set CGdb = s.CurrentDatabase
   Set CGview = CGdb.GetView("0. Corporate Desktop(s) Categorized")
   Set CGdoc = CG.view.getfirstdocument
   
   While Not(doc Is Nothing)
      If CGdoc.form = "f_database_icon" Then
         repID = CGdoc.t_db_replica_id(0)
         server = CGdoc.disp_nam_db_server(0)
         'Set directory = s.GetDbDirectory(server)
         
         Call db.OpenByReplicaID(server , repID)
         Print db.Title, , db.FilePath
         
      End If
      Set CGdoc = CG.view.getnextdocument(CGdoc)      
   Wend
   
End Sub

Glombi

  • Gast
Re: "Set db" anhand der ReplicaID
« Antwort #4 am: 09.10.08 - 09:17:25 »
Statt
Set CGdoc = CG.view.getfirstdocument
muss es
Set CGdoc = CGview.getfirstdocument
heissen

und statt
Set CGdoc = CG.view.getnextdocument(CGdoc)     
eben
Set CGdoc = CGview.getnextdocument(CGdoc)     


Tipp: Wenn Du den Debugger nutzt, siehst Du gleich, wo der Fehler ist.



Andreas

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: "Set db" anhand der ReplicaID
« Antwort #5 am: 09.10.08 - 09:19:22 »
Zitat
Set CGdoc = CG.view.getfirstdocument
   
   While Not(doc Is Nothing)
Da passt was nicht zam.

Option Declare einschalten und ev. noch einen LS-Kurs besuchen?
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 Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #6 am: 09.10.08 - 15:30:18 »
.... da waren wieder die berühmten Tomaten auf den Augen !

DANKE !


Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #7 am: 14.10.08 - 12:13:51 »
Ich habe doch noch eine Frage:

Mit
Call db.OpenByReplicaID(server , eval)
wird die Datenbank versucht zu öffnen. das ist nicht mein Ziel.

Ich will die DB nicht öffnen sondern nur die Eigenschaften auslesen.
Mein Ziel ist es anhand der Rep ID die Eigenschaften der DB auszulesen.

Gibr es ggf eine Alternative zu "Call db.OpenByReplicaID"

Hier mein Script.
Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim directory As NotesDbDirectory
   Dim db As New NotesDatabase("","")
   Dim repID As String
   Dim server As String
   Dim datei As String
   Dim eval, alterString, neuerString As String
   
   Dim CGdb As NotesDatabase
   Dim CGview As NotesView   
   Dim CGdoc As NotesDocument
   
   Set CGdb = s.CurrentDatabase
   Set CGview = CGdb.GetView("0. Corporate Desktop(s) Categorized")
   Set CGdoc = CGview.getfirstdocument
   alterString = ":"
   neuerString = ""
   
   While Not(CGdoc Is Nothing)
      
      If CGdoc.form(0) = "f_database_icon" And CGdoc.k_db_type(0) = "spec" Then
         server = CGdoc. t_db_server(0)   
         repID = CGdoc.t_db_replica_id(0)
         eval = Replace(repID, ":", "")
         
         Call db.OpenByReplicaID(server , eval)
         Print db.Title
         
      End If
      Set CGdoc = CGview.getnextdocument(CGdoc)      
   Wend   
End Sub

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: "Set db" anhand der ReplicaID
« Antwort #8 am: 14.10.08 - 12:17:40 »
in der Hilfe:

A database must be open in order to access all its properties and methods.

grüsse

Dau-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #9 am: 14.10.08 - 12:26:03 »

So erhalte ich aber die Meldung:

This Datbase object is already open as (Servername)

Wie kann ich das umgehen ?

Glombi

  • Gast
Re: "Set db" anhand der ReplicaID
« Antwort #10 am: 14.10.08 - 12:52:47 »
Kann es sein, dass die gleiche Datenbank mehrfach in  CGdoc  vorkommt?

Falls ja, kannst Du Dir bspw. den letzten Wert für die Repl ID merken:


Sub Click(Source As Button)
   Dim s As New NotesSession
   Dim directory As NotesDbDirectory
   Dim db As New NotesDatabase("","")
   Dim repID As String
Dim repID_alt As String
   Dim server As String
   Dim datei As String
   Dim eval, alterString, neuerString As String
   
   Dim CGdb As NotesDatabase
   Dim CGview As NotesView   
   Dim CGdoc As NotesDocument
   
   Set CGdb = s.CurrentDatabase
   Set CGview = CGdb.GetView("0. Corporate Desktop(s) Categorized")
   Set CGdoc = CGview.getfirstdocument
   alterString = ":"
   neuerString = ""
   repID_alt = ""
   While Not(CGdoc Is Nothing)
     
      If CGdoc.form(0) = "f_database_icon" And CGdoc.k_db_type(0) = "spec" Then
         server = CGdoc. t_db_server(0)   
         repID = CGdoc.t_db_replica_id(0)
         eval = Replace(repID, ":", "")
repID = eval(0)
if repID_alt <> repID then         
         Call db.OpenByReplicaID(server , repID)
end if
         Print db.Title
repID_alt = repID
         
      End If
      Set CGdoc = CGview.getnextdocument(CGdoc)     
   Wend   
End Sub




Tipp:
Dim eval, alterString, neuerString As String
macht man nicht, sonderm
Dim eval as variant
dim alterString as string, neuerString As String



Andreas

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #11 am: 14.10.08 - 13:22:19 »
hallo Andreas,
vielen Dank für Deinen Hinweis. Die Idee ist nicht schlecht.
Leider bleibt der Fehler bestehen: This database object is already open .....
(Sie ist auch durch definitiv User im Gebarauch)

Dim s As New NotesSession
   Dim directory As NotesDbDirectory
   Dim db As New NotesDatabase("","")
   Dim repID As String
   Dim server As String
   Dim datei As String
   Dim eval As String
   Dim alterString As String, neuerString As String, repID_alt  As String
   
   Dim CGdb As NotesDatabase
   Dim CGview As NotesView   
   Dim CGdoc As NotesDocument
   
   Set CGdb = s.CurrentDatabase
   Set CGview = CGdb.GetView("0. Corporate Desktop(s) Categorized")
   Set CGdoc = CGview.getfirstdocument
   alterString = ":"
   neuerString = ""
   repID_alt = ""
   
   While Not(CGdoc Is Nothing)
      
      If CGdoc.form(0) = "f_database_icon" And CGdoc.k_db_type(0) = "spec" Then
         server = CGdoc. t_db_server(0)   
         repID = CGdoc.t_db_replica_id(0)
         
         If server = "%INI%ICODEX_CD_SPK_APPLSERVER" Then
            server = "S276LN22/SPKHolstein/DE"
         End If
         
         eval = Replace(repID, ":", "")
         repID = eval
         
         If repID_alt <> repID Then         
            Call db.OpenByReplicaID(server , repID)
         End If
         Print db.Title
         repID_alt = repID
         
      'Textdatei erstellen
         Datei = "d:\cg.txt"
         Open datei For Append Access Write As #1
         Print #1, Cstr(db.Title) & " " & repID
         Close #1
         
      End If
      Set CGdoc = CGview.getnextdocument(CGdoc)      
   Wend   



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: "Set db" anhand der ReplicaID
« Antwort #12 am: 14.10.08 - 13:45:40 »
OpenByReplicaID liefert sogar einen Rückgabewert - wie wärs wenn Du den abfängst und entsprechend reagierst, anstatt diesen mit "Call" einfach zu ignorieren?
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 koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: "Set db" anhand der ReplicaID
« Antwort #13 am: 14.10.08 - 13:53:34 »
Eine weitere Ignoranz ist dies:

Code
         If server = "%INI%ICODEX_CD_SPK_APPLSERVER" Then
            server = "S276LN22/SPKHolstein/DE"

Und wenn nicht? Das wird dann ein unkontrollierbarer Zustand.

Bernhard

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #14 am: 14.10.08 - 14:09:08 »
so habe ich es schon probiert, es kommt leider die selbe meldung:


   If db.OpenByReplicaID( server , repID ) Then
    Print db.Title
   End If

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: "Set db" anhand der ReplicaID
« Antwort #15 am: 14.10.08 - 14:15:24 »
Und welche Werte stehen in server und replID vor der Verwendung von OpenByReplicaID?

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #16 am: 15.10.08 - 10:42:33 »
Die DB Eigenschaften werden mir angezeigt. Der Fehler kommt erst danach.
Alsob ich die DB erst wieder schließen muss damit die nächste DB aus dem folgenden Dok ausgelesen werden kann. Hat jemand eine Idee wie ich das machen kann ?

   While Not(CGdoc Is Nothing)
      
      If CGdoc.form(0) = "f_database_icon" And CGdoc.k_db_type(0) = "spec" Then
         server = CGdoc. t_db_server(0)   
         repID = CGdoc.t_db_replica_id(0)
                     
         eval = Replace(repID, ":", "")
         repID = eval
         
         If db.OpenByReplicaID( server , repID ) Then
            Msgbox          db.Title   
            Msgbox          db.filepath
            Msgbox          db.server

         End If
         
      End If
      
      Set CGdoc = CGview.getnextdocument(CGdoc)      

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #17 am: 15.10.08 - 10:49:41 »

könnte ich

Delete linkDb

hierfür verwenden ? oder was macht notes dann ?

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: "Set db" anhand der ReplicaID
« Antwort #18 am: 15.10.08 - 12:08:39 »
wenn du ein
set db = nothing
am Ende der Schleife setzt, was macht er dann?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Hedwig14

  • Aktives Mitglied
  • ***
  • Beiträge: 221
Re: "Set db" anhand der ReplicaID
« Antwort #19 am: 16.10.08 - 11:06:15 »
Ich habe jetzt

  Dim db As New NotesDatabase("","")

am Anfang der Schleife eingestellt. Jetzt klappt es !

Vielen Dank an alle !

 :love: :love: :love: :love: :love: :love: :love: :love: :love:

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz