Autor Thema: Adressbuch 'People' auslesen  (Gelesen 6594 mal)

Offline antonio945

  • Frischling
  • *
  • Beiträge: 6
Adressbuch 'People' auslesen
« am: 03.04.12 - 14:21:19 »
Hallo!
Ich habe folgendes Script in einen Button in meine Access-DB eingebunden.
Das Script soll mir alle Inhalte in eine Tabelle schreiben.

Problem:
Das Script arbeitet alles ab, bringt aber leider zum Schluss eine Fehlermeldung Error-Nr 91
'Objektvariable oder With-Blockvariable nicht festgelegt '

Zuätzlich hätte ich noch gerne, dass mein Code nur ein Adressbuch mit dem Namen "People" durchläuft.
Gibt es hierzu eine Möglickeit?

Gruß antonio

Public Function fctReadAdressbook()
On Error GoTo ErrorHandling

  Dim session As Object
  Dim db As Object
  Dim doc As Object, dc1 As Object, doc1 As Object
  Dim exist As Boolean
  
    
  Dim R As Recordset
    
    Set session = CreateObject("Notes.NotesSession")
    Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "names.nsf")
    If db.IsOpen = False Then
      db.OPENMAIL
    End If
 
   Set dc1 = db.Alldocuments
    Set doc1 = dc1.GETFIRSTDOCUMENT
    
    
    
    While Not doc1 Is Nothing
    Set doc1 = dc1.GETNEXTDOCUMENT(doc1)
      
    
   If doc1.getitemvalue("Department")(0) = "AB/TEST" then
      
        Set R = CurrentDb.OpenRecordset("SELECT * from User")
        R.AddNew
        R!Lastname = Nz(doc1.getitemvalue("Lastname")(0))
        R!Firstname = Nz(doc1.getitemvalue("Firstname")(0))
        R!IDName = Nz(doc1.getitemvalue("ShortName")(0))
        R!Abteilung = Nz(doc1.getitemvalue("Department")(0))
        R.Update
 
 End If
        
 Wend
R.Close: Set R = Nothing
db.Close: Set db = Nothing

Exit_NächsterDatensatz:
    Exit Function

ErrorHandling:

 
    Debug.Print Err.Description, Err.Number
End Function
« Letzte Änderung: 04.04.12 - 10:42:52 von antonio945 »

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Adressbuch 'People' auslesen
« Antwort #1 am: 03.04.12 - 14:34:46 »
Das GetNextDocument steht an der falschen Position - es ist logisch, dass es in der Zeile beim letzten Dokument der Collection knallt. Ausserdem wird durch die falsche Stelle auch gleich mal immer das erste Dokument ausgelassen.

Wegen Adressbuch "People": Warum wird dieses denn nicht geöffnet, wenn es erwünscht wird??

Bernhard

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Adressbuch 'People' auslesen
« Antwort #2 am: 03.04.12 - 14:35:33 »
Ja, nimm anstatt names.nsf people.nsf

Du machst ein getFirstDocument

dann while not is nothing

und dann sofort getNextdocument.

1. Das erste Dokument wird nicht verarbeitet
2. Rate mal was beim letzten Dokument passiert.

Bernhard ich muss schneller tippen lernen.  ;D
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline antonio945

  • Frischling
  • *
  • Beiträge: 6
Re: Adressbuch 'People' auslesen
« Antwort #3 am: 03.04.12 - 15:00:09 »
Hallo,
vielen Dank für die schnelle Rückmeldung.

Habe nun mal names.nsf durch people.nsf
ersetzt und funktioniert.

Die Zeile
Set doc1 = dc1.GETNEXTDOCUMENT(doc1)

habe ich nun  mal am Ende vor die Zeile

Wend
gesetzt, leider habe ich nun das Problem, dass nach dem ersten gefundenen Eintrag zu

If doc1.getitemvalue("Department")(0) = "AB/TEST" then

die Bedingung erfüllt ist und ich nur einen Adressbucheintrag erhalte.
Ich möchte aber alle Adressen aus dem Adressbuch mit 
doc1.getitemvalue("Department")(0) = "AB/TEST" erhalten.

Wie kann man das umsetzen?

Gruß antonio




Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Adressbuch 'People' auslesen
« Antwort #4 am: 03.04.12 - 15:03:23 »
Hä?? Code!

Offline antonio945

  • Frischling
  • *
  • Beiträge: 6
Re: Adressbuch 'People' auslesen
« Antwort #5 am: 03.04.12 - 15:14:24 »
Hallo,
hier nochmal mein Code.

Public Function fctReadAdressbook()
On Error GoTo ErrorHandling

  Dim session As Object
  Dim db As Object
  Dim doc As Object, dc1 As Object, doc1 As Object
  Dim exist As Boolean
 
   
  Dim R As Recordset
   
    Set session = CreateObject("Notes.NotesSession")
    Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "People.nsf")
    If db.IsOpen = False Then
      db.OPENMAIL
    End If
 
   Set dc1 = db.Alldocuments
    Set doc1 = dc1.GETFIRSTDOCUMENT
   
    While Not doc1 Is Nothing
         
     
   If doc1.getitemvalue("Department")(0) = "AB/TEST" then
     
        Set R = CurrentDb.OpenRecordset("SELECT * from User")
        R.AddNew
        R!Lastname = Nz(doc1.getitemvalue("Lastname")(0))
        R!Firstname = Nz(doc1.getitemvalue("Firstname")(0))
        R!IDName = Nz(doc1.getitemvalue("ShortName")(0))
        R!Abteilung = Nz(doc1.getitemvalue("Department")(0))
        R.Update
 
 End If

Set doc1 = dc1.GETNEXTDOCUMENT(doc1)
       
Wend
R.Close: Set R = Nothing
db.Close: Set db = Nothing

Exit_NächsterDatensatz:
    Exit Function

ErrorHandling:

 
    Debug.Print Err.Description, Err.Number
End Function
 
 



Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Adressbuch 'People' auslesen
« Antwort #6 am: 03.04.12 - 15:17:14 »
Damit bekommst Du doch alle Einträge, die die Bedingung erfüllen ...

Bernhard

Offline antonio945

  • Frischling
  • *
  • Beiträge: 6
Re: Adressbuch 'People' auslesen
« Antwort #7 am: 03.04.12 - 15:19:03 »
leider bekomme ich nur immer einen Datensatz als Ergebnbis?

Gruß antonie

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Adressbuch 'People' auslesen
« Antwort #8 am: 03.04.12 - 15:23:40 »
Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "People.nsf")
If db.IsOpen = False Then
  db.OPENMAIL
End If

Kann es sein, dass es die Datenbank nicht gibt? Wenn die Datenbank nicht geöffnet werden konnte, nimmst Du stattdessen die Maildatenbank des Benutzers. Und da ist vielleicht genau ein Dokument drin, dass die Bedingung erfüllt. Frag mich nicht nach der dahinter liegenden Logik, ist Dein Script  :)

Offline antonio945

  • Frischling
  • *
  • Beiträge: 6
Re: Adressbuch 'People' auslesen
« Antwort #9 am: 03.04.12 - 16:40:50 »
Hallo zusammen,
habe das Problem gefunden.
Ein Feld meiner Tabelle hatte einen Primärschlüssel ohne Duplicate.
In meiner der Adressdatenbank von Notes waren aber doppelte Einträge.

Nach der Änderung war das Problem gelöst.

Nun noch eine Frage zum Schluss:
Wenn ich meiner Adressdatenbank mit dem Zusatz   ...."People.nsf" angebe funktioniert das Script
'Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "People.nsf")  ==> Script i.O:

wenn ich mir die Eigenschaften in meiner Noteskachel Peaople- Auswahl Datenbank / Eigenschaften ansehe,
ist dort als Dateinmae ...."address/namesldo.nsf")
für People aufgeführt - siehe nachfolgend.

Welcher Dateiname hat jetzt Gültigkeit bzw. muss eingesetzt werden oder haben beide Ihre Berechtigung?


Set db = session.GETDATABASE("sstrdm10.wk.dcx.com/Server/Prod/DCX", "address/namesldo.nsf") ==> Script ebenfalls i.O:


 Gruß antonio

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Adressbuch 'People' auslesen
« Antwort #10 am: 03.04.12 - 16:45:17 »
"People" ist der Datenbank-Titel und spielt (programmatisch) keinerlei Rolle. Die DB kann man auch "Leberwurscht" nennen.
Da das Öffnen von people.nsf funktioniert, muss es auch eine DB mit diesem Dateinamen geben! namesldo.nsf ist physisch ein anderes File.

Bernhard

Offline Pyewacket

  • Senior Mitglied
  • ****
  • Beiträge: 310
  • Geschlecht: Männlich
Re: Adressbuch 'People' auslesen
« Antwort #11 am: 04.04.12 - 09:57:56 »
Hallo Antonio,

auf dem Server sstrdm10 gibt es definitiv KEINE Datenbank die People.nsf heisst, hab eben nachgeschaut  :)

Wenn nach dem "Set db = session...:"  die Datenbank nicht offen ist dann gibt es sie nicht,
durch das db.openmail wird dann, wie Peter Klett schon erwähnt hat, stattdessen dein Mailfile
geöffnet und die darin enthaltenen Personendokumente werden gefunden.

Wenn du das Adressbuch meinst in dem domänenübergreifend alle User stehen
dann musst du address/namesldo.nsf verwenden 
(Dieses Adressbuch heisst aber nur bei deinem Arbeitgeber so, das ist kein Standardname!)
Wunder dich nicht wenn dein Agent dann sehr lange läuft, immerhin muss er ca 230000 Dokumente anschauen.

Gruss
 Peter


ATOS.org - Feel the music!

Offline antonio945

  • Frischling
  • *
  • Beiträge: 6
Re: Adressbuch 'People' auslesen
« Antwort #12 am: 04.04.12 - 10:32:07 »
Hallo Pyewacket,
du hast recht, mein Adressbuch indem alle User stehen heist: ....address/namesldo.

Vielen Dank nochmals an alle.

Mein Script läuft jetzt so wie ich es wollte.

Gruß Antonio  :) ;) :D

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz