Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: f.r@notesforum.de am 22.01.03 - 09:44:11
-
Hi Leute,
habe 26000 Datensätze in meiner Datenbank. Da ich nur mit einem Teil dieser arbeiten möchte, nämlich nur mit Datensätzen aus der Maske "Kontakt", suche ich nun eine Möglichkeit die DocumentCollection von Anfang an auf die Menge der Kontaktdatensätze setzen zu können, soll heißen statt
Set documentcollection = database.AllDocuments
irgendetwas Maskenbezogenes. Die Laufzeit meines Agenten ist nämlich atemberaubend lang.
Bin für jeden Tipp dankbar,
Robert
-
Hi Robert,
wenn Du eine Ansicht hast, in welcher sich nur die Dokumente mit der entsprechenden Maske befinden, dann kannst Du mit einer ViewEntryCollection arbeiten.
Meff ;)
P.S.: Das Ding gehört doch eher ins Entwicklungsforum !?
-
Hi,
andere Alternative wäre die Collection mit der Methode Search aus der NotesDatabase-Klasse zu füllen.
Dim strSearch as String
Dim db As NotesDatabase
...
strSearch = |Form = "Name der Kontaktmaske"|
Set collection = db.Search(strSearch, Nothing, 0)
...
Axel
-
Hi Leute,
erstmal danke an alle die mir geschrieben haben, habe aber noch ein Problem, welches die erfahreneren Programmierer sicherlich eher lösen als ich es kann.
Mein Agent besteht aus folgendem Quellcode:
Dim Session As New NotesSession
Dim database As NotesDatabase
Dim notesdocument, branchendocument As NotesDocument
Dim BranchenID As String
Dim strSearch As String
Dim firmencollection As NotesDocumentCollection
Dim formitem, fielditem, fielditem2 As NotesItem
Dim boxType As Long
Dim documentcount, firmencount, branchencount, help1, help2, help3, help4, help5, help6, answer, answer2 As Integer
Set database = session.CurrentDatabase
strSearch = |Form = "Kontakt"|
Set firmencollection = database.Search(strSearch, Nothing, 0)
documentcount = firmencollection.Count
help1 = 1
help2 = 1
help3 = documentcount / 20
help4 = help3
help5 = 5
help6 = help5
Do While help1 < documentcount
Set notesdocument = firmencollection.GetNthDocument(help2)
Set formitem = notesdocument.GetFirstItem("BranchenID")
BranchenID = formitem.values(0)
If BranchenID <> " " Then
Set branchendocument = branche.GetDocumentByKey(BranchenID, True)
Set fielditem = branchendocument.GetItemValue("BRHBR")
Set fielditem2 = branchendocument.GetItemValue("BRUBR")
Call fielditem.CopyItemToDocument(Kontakt, "HBranche")
Call fielditem2.CopyItemToDocument(Kontakt, "NBranche")
End If
If help3 < help1 Then
boxType& = MB_YESNO + MB_ICONQUESTION
answer = Messagebox("Weiterlaufen lassen? Bisher abgearbeitet " + help5 + "%.", boxType&, "Continue?")
If answer = 7 Then
Exit Do
End If
help3 = help3 + help4
help5 = help5 + help6
End If
help1 = help1 + 1
help2 = help2 + 1
Loop
Der Debugger bringt eine Fehlermeldung in Zeile:
"Set branchendocument = branche.GetDocumentByKey(BranchenID, True)".
Die Fehlermeldung lautet:
"Variant does not contain an object"
Könnt ihr mir das bitte mal erklären?
-
Hi,
branche ist weder deklariert nocxh initialisiert.
füge folgende, fettgedruckte Zeilen ein:
Dim Session As New NotesSession
Dim database As NotesDatabase
Dim notesdocument, branchendocument As NotesDocument
Dim branche As NotesView
Dim BranchenID As String
Dim strSearch As String
Dim firmencollection As NotesDocumentCollection
Dim formitem, fielditem, fielditem2 As NotesItem
Dim boxType As Long
Dim documentcount, firmencount, branchencount, help1, help2, help3, help4, help5, help6, answer, answer2 As Integer
Set database = session.CurrentDatabase
Set branche = database.GetView("Name der Ansicht")
strSearch = |Form = "Kontakt"|
Set firmencollection = database.Search(strSearch, Nothing, 0)
documentcount = firmencollection.Count
help1 = 1
help2 = 1
help3 = documentcount / 20
help4 = help3
help5 = 5
help6 = help5
Do While help1 < documentcount
Set notesdocument = firmencollection.GetNthDocument(help2)
Set formitem = notesdocument.GetFirstItem("BranchenID")
BranchenID = formitem.values(0)
If BranchenID <> " " Then
Set branchendocument = branche.GetDocumentByKey(BranchenID, True)
Set fielditem = branchendocument.GetItemValue("BRHBR")
Set fielditem2 = branchendocument.GetItemValue("BRUBR")
Call fielditem.CopyItemToDocument(Kontakt, "HBranche")
Call fielditem2.CopyItemToDocument(Kontakt, "NBranche")
End If
If help3 < help1 Then
boxType& = MB_YESNO + MB_ICONQUESTION
answer = Messagebox("Weiterlaufen lassen? Bisher abgearbeitet " + help5 + "%.", boxType&, "Continue?")
If answer = 7 Then
Exit Do
End If
help3 = help3 + help4
help5 = help5 + help6
End If
help1 = help1 + 1
help2 = help2 + 1
Loop
Axel
-
Thanks very much
Einen von beiden Fehlern war auch mir schon aufgefallen. Danke für den anderen
Robert
-
Nochwas:
...
Dim docA, docB as Notesdocument
...
Damit ist docA vom Typ Variant deklariert, wie in VB auch.
Folge: miese Performance. Solltest Du ändern.
-
Hi Wolfgang,
dank dir für den guten Tipp.
Hab aber schon wieder ein neues Problem, hängt auch mit Performance zusammen, werd ich aber diesmal ins EntwicklerForum schreiben, würd mich freuen, wenn du darüber auch Bescheid weist.
Also nochmals danke
Robert