Domino 9 und frühere Versionen > ND8: Entwicklung

Problem mit db.search

<< < (2/3) > >>

Mitch:

--- Zitat von: Alfirin am 02.07.14 - 12:53:37 ---Set docclSearch = dbThis.Search(strSearch, Nothing, 11)
   lCounterBlock = 1         
  Do While docclSearch.Count > 0

      'Alle Dokumente der DB 'Kreditaktenarchiv' durchlaufen
      Set docBase = docclSearch.Getfirstdocument()
      lCounterDoc = docclSearch.Count

--- Ende Zitat ---

Warum sollte sich der Count auch ändern? Du kickst ja nirgendwo ein Dokument aus der Collection. Der bleibt also immer größer als Null. Endlossschleife. Oder übersehe ich da etwa etwas?

Laufe Collections doch lieber so in der Art durch:

--- Code: ---coll = db.Search({foo}, Nothing, 0)
Set doc = coll.GetFirstDocument
While Not doc Is Nothing

   'Code

   Set doc = coll.GetNextDocument(doc)

Wend

--- Ende Code ---

Gruß,

Mitch

ghostmw:
Ok, mit einer "statischen" DocCollection sollte es passen.

Das mit dbSearch ist aber alles andere als performant mit den vielen Aufrufen, das aber nur nebenbei.


--- Code: ---Do While Not docBase Is Nothing
        
         strKN = ""
         strKNOSP = ""
         Print lCounterBlock & ". Block - Es sind noch " & lCounterDoc & " von " & docclSearch.Count & " zu bereinigen ..."
        
       ...

nextDoc:  
     [i][b]    Set docBase = docclSearch.Getnextdocument(docBase)[/b][/i]
         lCounterDoc = lCounterDoc - 1
        
      Loop
--- Ende Code ---

das aber wundert mich, die Schleife wird bei dir erst nach zig tausend (ca. 40000) Durchläufen beendet.
Ich vermute mal, er navigiert dich trotzdem auf das nächste Dokument in der Gesamtmenge und beschränkt sich nicht auf die 11 Treffer ?

Lass dir mal in einer Schleife die UNID ausgeben und bei deinem bestehenden Print auch, vielleicht erkennt man da was uns hilft.

Andrew Harder:
Ich habe da mal eine Verständnisfrage dazu.
Verstanden habe ich schon, das sich in der Datenbank ca. 700.000 Dokumente befinden und es wird db.Search benutzt.
Meine Fragen dazu:
1. Hat diese Datenbank einen Volltxtindex?  :-:
2. Hat die Blockbildung eine technischen Hintergrund?

umi:
Moin

Ich würde, wie schon vorgeschlagen, das ganze über eine Ansicht erledigen. Auch bei 700'000 Datensätzen, sollte das relativ schnell sein, wenn das als server Agent läuft.
Da hier die Kundennummer mehrfach vorkommt, kannst Du dir das Result des Lookups in einer Liste cachen. Was Dir hier eine menge lookups erspart.
Damit hast du nur noch 1 Loop.
Sehr viel zeit benötigt wohl die DB Search selber und ausserdem gibts da einen kleinen bug siehe http://www.iminstant.com/iminstant/iminstant.nsf/d6plinks/CTYR-77KRBX

Falls du es trotzdem blockweise machen möchtest, würde ich in der Ansicht noch die Selection auf ein Feld z.B. KdnNr.Aktualisiert="" machen und im Loop dieses Feld setzen. dann kannst Du die Ansicht durcharbeiten und per counter z.B. nach 10 oder 100 Dokumenten abbrechen.

ghostmw:
Bingo, Count ist 11 und dein Loop geht über alle ca. 40000 Dokumente mit getNextDocument.

Mein "Vorredner" hat sogar den "Bug" mit Link geliefert und meine Ahnung bestätigt.

Also wären wir wieder bei einer Alternative wie der View.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln