Быстрый отбор и помещение документво в папку

  • Автор темы Sayonara
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sayonara

#1
Я тут почитал форумы и мне понравилась идея, о отправки найденных доков в папку, чтобы пользователь уже имел возможность работать с необходимой ему информацию. Нов от проблемма для 1 дня (это 500 записей в среднем), этот метод работает 2 минуты!!! А иногда нужно сортировать 2-х месячные логи..., это порядка нескольких часов, и абсалютно не приемлемо.... :)
Люди, кто может посаветовать, более оптимальный код сортировки?

Код:
Sub Click(Source As Button)
Dim wks As New NotesUIWorkspace
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim txt As String


Set db = wks.CurrentDatabase.Database


Set dc=db.AllDocuments
Set doc=dc.GetFirstDocument

While Not doc Is Nothing

txt = doc.FullName(0)

          If Instr(txt,"\Ролики\Анонсы\") > 0 Then

       If Instr (txt,"\Ролики\Анонсы\некоммерческие") > 0 Then
 
       Else
Call doc.PutInFolder("Анонсы",True)	
       End If

End If

If Instr(txt,"Рекламные") > 0 Then

Call doc.PutInFolder("реклама",True)	
End If

If Instr(txt,"Сегодня в эфире") > 0 Then

Call doc.PutInFolder("Коммерческие",True)	

End If
 
Set doc=dc.GetNextDocument(doc)	
Wend

Msgbox("Сортировка закончена")
End Sub
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
Попробуй использовать методы notesDatabase.Search или notesDatabase.FTSearch (или, лучше, notesView.FTSearch), а не просматривать каждый документ в цикле. А потом сделаешь notesDocumentCollection.PutAllInFolder. Будет гораздо быстрее.
 
S

Sayonara

#3
<!--QuoteBegin-Medevic+31:01:2006, 15:11 -->
<span class="vbquote">(Medevic @ 31:01:2006, 15:11 )</span><!--QuoteEBegin-->Попробуй использовать методы notesDatabase.Search или notesDatabase.FTSearch (или, лучше, notesView.FTSearch), а не просматривать каждый документ в цикле. А потом сделаешь notesDocumentCollection.PutAllInFolder. Будет гораздо быстрее.
[snapback]29950" rel="nofollow" target="_blank[/snapback]​
[/quote]
Пробывал... вот, что у меня получилось.....
Код:
Set view = db.GetView("LogView")

j = view.FTSearch( "Рекламные", 0 )
Set doc = view.GetFirstDocument()

While Not(doc Is Nothing)
 Call doc.PutInFolder( "реклама", True )
 Set doc = view.GetNextDocument(doc)
Wend

j = view.FTSearch( "Сегодня в эфире", 0 )
Set doc = view.GetFirstDocument()

While Not(doc Is Nothing)
 Call doc.PutInFolder( "Коммерческие", True )
 Set doc = view.GetNextDocument(doc)
Wend

j = view.FTSearch( "Новый поворот", 0 )
Set doc = view.GetFirstDocument()

While Not(doc Is Nothing)
 Call doc.PutInFolder( "Коммерческие", True )
 Set doc = view.GetNextDocument(doc)
Wend
Но работает, на 5 секунд быстрее, тоесть для одного дня 1-ый способ 1 мин.50 сек, а во 2-ом способе 1 мин. 45 сек...... тоже не приемлимо....
Хотя может я неправильно написал код.... :-\
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#4
Дааа. :D
Не проще ли примеры в хелпе глянуть по этим методам ?
 
D

Domino6

#5
Кладив папку не поштучно а коллециями

метод Putallinfolder от коллекции документов
Код:
	Dim ses As New NotesSession
Dim db As NotesDatabase
Set db = ses.CurentDatabase
Dim scol As NotesDocumentCollection
Dim qS List As String
' Показатель имя папки значение полнотекстовый запрос согласно синтаксису FT Search
qs("Папка 1")="Полнотекстовый запрос"
qs("Реклама")="Рекламные"
qs("Цены товар")="цена | price | produce | товар"

Forall q In qs
scol = db.FTSearch( q, 0 )
If scol.Count>0 Then
Call scol.PutInAllFolder( Listag(q), True )
End If
End Forall
в qs дописываеш нужное колличество элементов
в виде qs("Папка 1")="Полнотекстовый запрос"
 
S

Sayonara

#6
<!--QuoteBegin-Medevic+1:02:2006, 15:15 -->
<span class="vbquote">(Medevic @ 1:02:2006, 15:15 )</span><!--QuoteEBegin-->Дааа. :D
Не проще ли примеры в хелпе глянуть по этим методам ?
[snapback]29991" rel="nofollow" target="_blank[/snapback]​
[/quote]
Это и был пример из хелпа..... :(
 
S

Sayonara

#7
Domino6, спасибо супер!!! Очень помогло и нетолько в этой проблеме.... :(
 
Статус
Закрыто для дальнейших ответов.