Аналог Like

  • Автор темы Didokz
  • Дата начала
D

Didokz

#1
всем привет, подскажите, как мне искать в документе необходимые слова в поле
Код:
search = "Form="KR" & Num="1" & Corr="БАНК"
colldoc = db.Search(search, null, 0);
к примеру поле "кореспондент"="АО "КРЕДИТ БАНК" или "кореспондент"="АО "АЛЬЯНС БАНК"
в этом случае эти документы должны быть найдены по этому поиску, есть ли функция типа как LIKE ?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#4
всегда существует оценка эффективности...
если набор большой - возможно DbSearch
а ежели - нет - то выборку можно "втянуть" и искать в ней
притом не все варианты возможны для поиска (т.е. всего-лишь надо <начало фразы>* или *<конецфразы>)
можно решить и индексом (сгенерив мультивалюйное поля - для поиска, с вариантами)

Добавлено:
search = "Form="KR" & Num="1" & @Like(Corr)="БАНК"
а просто написать в отборе тестовой вьюшеке - не судьба? :)
или открыть хэлп по формуле....
 
D

Didokz

#5
так геморно, мне надо в БД искать документы по вх.номерам и по кореспондентам
я не хочу каждый документ открывать, "втянуть" и искать, пусть сервер это делает
db.Search(...
пишу на C# импользуя СОМ библиотеки, про @Uppercase узнал уже )))
search = "Form='KR' & Num='" + InNumber.Text + "' & @Uppercase(Corr)='" + Korespondent.Text.ToUpper() + "'";
я сам в Лотусе не пишу и дизайнера(хелп по нему в т.ч) у меня нету :)
 
D

Didokz

#7
ещё одна проблема:
colldoc = db.Search(search, null, 0);
doc = colldoc.GetFirstDocument();
поле RegDate в документе отображается как дд.мм.гггг
я проверял, почему не срабатывает думал:
MessageBox.Show(doc.GetFirstItem("RegDate").Text);
возвращает дд.мм.гггг чч.мм.сс
как правило юзер время не помнить и не вводят, как искать такую дату
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#8
Понял только с третьего прочтения.
@Date(RegDate) вернёт только дату.
 
D

Didokz

#9
Понял только с третьего прочтения.
@Date(RegDate) вернёт только дату.
а в каком формате возварщает ? дд.мм.гггг или мм.дд.гггг ?
че то у меня при поиске с датой не срабатывает поиск, без даты работает
search = "Form="KR" & Num="1" & @Date(RegDate)="23.12.2009" & @Contains(@LowerCase(Corr);'" + Korespondent.Text.ToLower() + "')";
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#11
В формате даты.
Дату надо брать в квадратные скобки.
@Date(RegDate)=[23.12.2009]

Добавлено: Ну а более правильно:
@Date(RegDate)=@Date(2009; 12; 23)
 
D

Didokz

#12
г-н lmike, вы просто мимо идите,сюда не заглядывайте
 
D

Didokz

#14
В формате даты.
Дату надо брать в квадратные скобки.
@Date(RegDate)=[23.12.2009]

Добавлено: Ну а более правильно:
@Date(RegDate)=@Date(2009; 12; 23)
с кв.скобками ошибка в формуле говорит, я же использую в db.search()
a
Код:
search = "Form="KR" & Num="1" & @Date(RegDate)="2009.12.23" & @Contains(@LowerCase(Corr);'" + Korespondent.Text.ToLower() + "')";
не возвращает ничего :)
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#15
Если берешь в квадратные скобки, то вводить дату надо в региональном формате. т.е. [23.12.2009].
Поэтому лучше использовать @Date(2009; 12; 23). Параметры - год, месяц, число.
 

nvyush

Lotus team
22.04.2009
2 317
0
#16
Didokz
Что-то мне кажется с кавычками Вы намудрили. В ЛС запрос скорее всего выглядел бы так:
Код:
search = {Form="KR" & Num="1" & @Date(RegDate)=@Date(2009; 12; 23) & @Contains(@LowerCase(Corr);"} + Korespondent.Text.ToLower() + {")}
с учётом того, что в ЛС {} — ещё один вид кавычек.
Может так получится:
Код:
search = "Form=\"KR\" & Num=\"1\" & @Date(RegDate)=@Date(2009; 12; 23) & @Contains(@LowerCase(Corr);\"} + Korespondent.Text.ToLower() + "\")";
 
D

Didokz

#17
Если берешь в квадратные скобки, то вводить дату надо в региональном формате. т.е. [23.12.2009].
Поэтому лучше использовать @Date(2009; 12; 23). Параметры - год, месяц, число.
дело в том что дата у меня переменный,берется с текстбокса InDate.Text
но я могу в этом в текстбоксе настроит дату как хочу, могу гггг.мм.дд или дд.мм.гггг, соответственно, при поиске док-в по дате:
если я настрою дд.мм.гггг
Код:
search = "@Date(RegDate)=[" + InDate.Text + "]...;
а если формат
гггг.мм.дд
то
Код:
 search = "@Date(RegDate)=@Date(" + InDate.Text + ")...;
далее
colldoc = db.Search(search, null, 0); и т.д.
я вас правильно понял ?

Добавлено:
Didokz
Что-то мне кажется с кавычками Вы намудрили. В ЛС запрос скорее всего выглядел бы так:
Код:
search = {Form="KR" & Num="1" & @Date(RegDate)=@Date(2009; 12; 23) & @Contains(@LowerCase(Corr);"} + Korespondent.Text.ToLower() + {")}
с учётом того, что в ЛС {} — ещё один вид кавычек.
Может так получится:
Код:
search = "Form=\"KR\" & Num=\"1\" & @Date(RegDate)=@Date(2009; 12; 23) & @Contains(@LowerCase(Corr);\"} + Korespondent.Text.ToLower() + "\")";
с кавычками проблем нет, так как если убрать из опций поиска дату,работает
Код:
search = "Form='KR' & Num='" + InNumber.Text +"' & @Contains(@LowerCase(Corr);'" + Korespondent.Text.ToLower() + "')";
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#18
Лучше давать дату по частям. Чтобы не было проблем с форматом. Типа такого:
Код:
search = "@Date(RegDate)=@Date(" + Year(InDate) + "; " + Month(InDate) + "; " + Day(InDate) + ")...;
 

nvyush

Lotus team
22.04.2009
2 317
0
#20
@Date(2009.12.23), @Year(2009.12.23), @Month(2009.12.23), @Day(2009.12.23) — не хватает кавычек/скобок.