Воборка

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

Fugitive

#1
Здравствуйте ! Я только начал заниматься Lotus и у меня возник вопрос.
Я в форме документа в свойстве querysave описал с помощью цикла сравнение на не совпадение поля в с полем из других документов. База примерно 1000 доакументов. Все вроде работает. Но цикл он проходит за 2-3 секунды.....А записей всего лишь 1000, а если будет 100 000 ?????? Как я понял можно написать агент который будет это все гнать на сервере. Но что ради такой элементарной операцией нужно теперь замарачиваться на агент ??? Может быть есть более простой и быстрый способ получить выборку документов с критерием отбора ??????
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
Для: Fugitive, как выглядит цикл ? Может есть способ заменить его @Dblookup или GetDocumentByKey ? Будет гораздо быстрей.
У меня база ~5500 записей. Поиск происходит при выходе из поля. Сделан через GetDocumentByKey. Работает меньше секунды (почти мгновенно). Думаю, что если сделать через Evaluate({@DbLokkup(...)}) будет вообще мгновенно.
 
F

Fugitive

#3
Спасибо. Не знал про такие методы. Прочитал про getdocumentbykey, можно ли в массиве, который передается как параметр написать логическое выражение ????
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#4
Пиши. Но оно пойдет как строка для поиска.
Если нужно искать по формуле, то попробуй notesDatabase.Search. Но, скорее всего, будет медленнее.
 
N
#5
Для реализации быстрого поиска по базе данных необходимо создать и затем периодически обновлять индекс этой базы данных, а для получения выборки документов согласно определенным критериям - пользоваться методом NotesDatabase.FTSearch
 
F

Fugitive

#6
Возник вопрос: можно ли в методах Search или FTsearch использовать условия что-то типа этого (...) or (...) ?
 
F

Fugitive

#8
Извините за глупый вопрос. Не пойму в чем дело.
Если делать так:

searchFormula$ = {dv="new2"}
Set collection_2 = db.Search(searchFormula$,Nothing,0)

все работает и возвращает один документ
А если так:

so_dv=Source.FieldGetText( "dv" )
searchFormula$ = {dv=so_dv}
Set collection_2 = db.Search(searchFormula$,Nothing,0)

упорно возвращает ноль документов.
???
 
F

Fugitive

#9
чуть чуть ошибся не ноль возвращает а 347. Короче не правильно !
 
N
#10
Fugitive

Попробуй так:

Код:
searchFormula$ = |dv="| + Source.FieldGetText("dv") + |"|
 
F

Fugitive

#11
Подскажите пожалуйста можно ли в Search ставить условия <, > ???? Или только условия на равно, не равно ???
 
F

Fugitive

#13
Извеняюсь за глупые вопросы.

в базе есть поле dat1 туда записывается дата полностью "19.01.2006 11:30:00"
Если пробежаться по базе циклом и поставить условие на равенство поля dat3 текущего документа и поля dat3 остальных документов, то все работает.

Если применять search

dat5=Source.FieldGetText( "dat3")
searchFormula$ = {Form = "av1" & dat3="} +dat5+{" }

Set collection_2 = db.Search(searchFormula$,Nothing,0)

возвращает ноль...
в дебагере смотрел значение dat5="19.01.2006 11:30:00"

Почему так ?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#14
Дату заключи в квадратные скобки:
<!--QuoteBegin-Fugitive+18:01:2006, 13:20 -->
<span class="vbquote">(Fugitive @ 18:01:2006, 13:20 )</span><!--QuoteEBegin-->searchFormula$ = {Form = "av1" & dat3=[} +dat5+{] }
[snapback]29471" rel="nofollow" target="_blank[/snapback]​
[/quote]
 
F

Fugitive

#16
Еще один маленький вопросик.
Я понял что в Search нельзя написать, чтобы сравнивалось не все поле а лишь его часть left(city,4)="mosc"
Можно ли это как-то обойти ???
 
N
#18
Для: Fugitive

Вопрос не ясен мне. В Search можно указать сравнение поля с любым доступным значением. Что значит "чтобы сравнивалось не все поле а лишь его часть"?
 
F

Fugitive

#19
Спасибо большое. Мне помог Medevic. Именно это я хотел. !
 
Статус
Закрыто для дальнейших ответов.