Hi,
Die notesDocumentCollection hat ja den vorteil von
.removeall
Der ist bei vielen doch schneller als ein enzelnes löschen.
wenn Du einzelne löscht, und "die verschwinden Dir" dann lade doch einfach das nächste schon vor dem löschen
ungefähr so:
while not doc is nothing
set docnext = view.getnextdocument(doc)
call doc.remove(true)
set doc = docnext
wend
Viel Erfolg, Pete(r)
Benutz einfach die Idee von pete bla
Oder diese docLast Variante :-)
set doc = vw.getFirstDocument
while not doc is nothing
set docLast = doc
set doc = view.getnextdocument(doc)
' code zum prüfen, ob docLast gelöscht werden kann, wenn ja dann löschen (nächste Zeile)
call docLast.remove(true)
wend
Hi,
wenns nun wirklich eine "einmalige Killaktion" sein sollte,
würde ich mal auf das klassische
collection = db.Search(Formel,Nothing,0)
verweisen,
da ja eine "Formel" dahinterliegt...
und dann
Ich finde für sowas ist das db.Search() optimal!
Gruss, Pete(r)
So , ich bedanke mich schon mal, hatte gestern leider die zeit nicht mehr um hier vorbei zu schauen.
Haber mit GetNextDocument gearbeitet , hier einmal der KernCode :
Set viewDoc = view.GetFirstDocument
searchKey = Cstr(viewDoc.GetItemValue("pumpSearchKey")(0))
i = 0
While Not viewDoc Is Nothing
Set redundantDoc = view.GetNextDocument(viewDoc)
While ready = False
If Not redundantDoc Is Nothing Then
If Cstr(redundantDoc.GetItemValue("pumpSearchKey")(0)) = searchKey Then
Call redundantDoc.Remove(True)
Set redundantDoc = view.GetNextDocument(viewDoc)
Else
ready = True
End If
End If
i = i +1
Print "Datensatz : " + Cstr(i) + " bearbeitet!"
Wend
Set viewDoc = view.GetNextDocument(viewDoc)
searchKey = Cstr(viewDoc.GetItemValue("pumpSearchKey")(0))
ready = False
i = i +1
Print "Datensatz : " + Cstr(i) + " bearbeitet!"
Wend
Am Anfang arbeitet er auch richtig performant und dann so ab 13.500 Dokumenten wird es ziemlich langsam und am Ende hängt er sich ganz weg.
Kann mir einer sagen was ich besser machen kann.
Ach bevor ich es vergesse, durch eine View habe ich die Dokumente so sortiert, dass das erste Dokument mit dem Schlüssel auch gleich das richtige ist.
Hi,
ich persönlich würde es auch mit Listen machen...
Mir ist gerade ein wenig langweilig, versuch doch mal diesen Code (nicht getestet)
Dim searchkeys List As Boolean
While Not viewDoc Is Nothing
If Iselement(searchKeys(viewDoc.GetItemValue("pumpSearchKey")(0))) Then
Call viewDoc.remove
Else
searchKeys(viewDoc.GetItemValue("pumpSearchKey")(0)) = True
End If
Set viewDoc = view.getNextDocument(viewDoc)
Wend
Müsste wesentlich performanter sein als dein jetziger Code...
Sollte dir die Liste wirklich um die Ohren fliegen musst du ein anderes Medium zum zwischenspeichern gefundener Elemente finden (zb. Tempdoc)
Gruss René
EDIT:
So gehts natürlich nicht ganz, du mussts den Code ein wenig modifizieren weil
Set viewDoc = view.getNextDocument(viewDoc)
mit dem gelöschten Dok nicht klappt, Lösung steht allerdings weiter oben, dann sollte es passen...
Ist das nicht so einfacher?
Dim lastValue as String
lastValue = "DAT_KANNES_ÜBERHAUPT_NICHT_GEBEN. ES_HARTO IMPROBABLE QUE una Casilla tenga un contenido así"
set doc = vw.getFirstDocument
while not doc is nothing
set docLast = doc
set doc = view.getnextdocument(doc)
if docLast.pumpsearchkey(0) = lastValue then
lastValue = docLast.pumpsearchkey(0)
call docLast.remove(true)
else
lastValue= docLast.pumpsearchkey(0)
end if
wend