Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как лучше организовать поиск по dw? / 11 сообщений из 11, страница 1 из 1
19.01.2006, 15:40
    #33492200
KleveRR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
Задача: есть таблица из 5 полей. Есть 5 пустых sle, куда пользователь может ввести значения для поиска. Может ввести только в одно, может в несколько (в этом случае подставляется "and").

Вопрос: как лучше организовать поиск по всем записям?

Удобно было бы использовать dw.filter(), но там нельзя использовать match.
Если использовать dw.find, то долго пробегать по всем записям.

Все облазил, так и не определился.
...
Рейтинг: 0 / 0
19.01.2006, 15:44
    #33492219
Mykola
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
view find in pfc or use find of pfc.
...
Рейтинг: 0 / 0
19.01.2006, 16:03
    #33492284
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
KleveRRУдобно было бы использовать dw.filter(), но там нельзя использовать match.
А почему это в dw.setfilter(...) нельзя использовать match(...)?
У меня почему-то работает...
Код: plaintext
if ( match( org_name ,'ООО*'), 1 , 0 ) =  1 
Выдает все организации, начинающиеся на ООО.
...
Рейтинг: 0 / 0
19.01.2006, 16:15
    #33492321
KleveRR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
Честно говоря, с match пока до конца не разобрался.

А вообще, правильно ли поиск фильтром организовывать?
...
Рейтинг: 0 / 0
19.01.2006, 16:46
    #33492412
Gosha
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
KleveRRА вообще, правильно ли поиск фильтром организовывать?
Поиск - есть поиск, фильтр - есть фильтр; это совсем разные вещи
...
Рейтинг: 0 / 0
19.01.2006, 17:40
    #33492609
KleveRR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
GoshaПоиск - есть поиск, фильтр - есть фильтр; это совсем разные вещи
Можно ведь с помощью фильтра организовать функцию поиска с точки зрения пользователя. И вполне, на мой взгляд, удобно.
...
Рейтинг: 0 / 0
19.01.2006, 17:47
    #33492634
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
Кгм, ошибочка вышла, не только начинающиеся с ООО, а
авторmatch( org_name ,'ООО*')
сам по себе тоже работает...
...
Рейтинг: 0 / 0
20.01.2006, 11:54
    #33493747
DIGITALPRO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
Я конечно наверно выдумал в свое время велосипед, и наверно, как то можно упростить задачу или решить ее более красиво, но мое решение следующее

Имеем DW
Имеем sle_find

При клике на dw
ls_dw_cname = 'LookUpDisplay(' + dwo.name+')'

в sle на keyup

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
Long ll_RGet, ll_RC, ll_find
Long ll_pos, ll_pos_kol, ll_pos_sum 
String ls_text_end, ls_find,ls_rezultat[]
String ls_dw_obj_name

// Определяем в каком поле DW происходит поиск
ls_dw_obj_name = ls_dw_cname//String(ivdw_dw.getcolumnname())
// Скрываем если нажата клавиша Escape
if key = KeyEscape! or ls_dw_obj_name = '-1' then
	ivdw_dw.setfocus( )
	this.visible = false
	RETURN
end if

// Определяем общее кол-во строк и на какой сейчас находимcя
//ll_RGet = ivdw_dw.getrow()
ll_RC = ivdw_dw.rowcount()

ls_text_end = String(this.text)
ll_pos = pos(ls_text_end,'*')

// Если первый символ <> * то ...
if left( this.text, 1 ) <> '*' then
	if ll_pos >  1  then
	 	ls_find = "Left(lower("+ls_dw_obj_name+"),"+String(Len(Left(String(this.text),ll_pos+(- 1 ))))+")='"+Lower(Left(String(this.text),ll_pos+(-1)))+"' and"
	else
		ls_find = "Left(lower("+ls_dw_obj_name+"),"+String(Len(String(this.text)))+")='"+Lower(String(this.text))+"'"
	end if
end if

do while ll_pos >  0 
	ll_pos_kol ++
	ll_pos_sum += ll_pos
	ls_text_end = Right(ls_text_end, len(ls_text_end)+(-ll_pos))
	ll_pos = pos(ls_text_end,'*')
	
	if ll_pos> 0  then
		ls_rezultat[ll_pos_kol]= " Pos(Lower("+ls_dw_obj_name+"),'"+&
										Lower(left(ls_text_end,ll_pos+(-1)))+"')>"+String(ll_pos_sum+(-ll_pos_kol))+" and "
	else
		ls_rezultat[ll_pos_kol]= " Pos(Lower("+ls_dw_obj_name+"),'"+&
										Lower(ls_text_end)+"')>"+String(ll_pos_sum+(-ll_pos_kol))
	end if
	ls_find += ls_rezultat[ll_pos_kol]
loop

ll_find = ivdw_dw.find(ls_find,  1 , ll_RC)
ivdw_dw.setrow( ll_find )
ivdw_dw.scrolltorow( ll_find )

================
РВ 9.0.3
...
Рейтинг: 0 / 0
20.01.2006, 12:53
    #33494011
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
Я вот не пойму, а чем LIKE не нравится ? Он и в поиске и фильтре работает, по функционалу не уступает LIKE в SQL. И делает что угодно и очень быстро.
...
Рейтинг: 0 / 0
20.01.2006, 13:54
    #33494272
KleveRR
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
ASCRUSЯ вот не пойму, а чем LIKE не нравится ? Он и в поиске и фильтре работает, по функционалу не уступает LIKE в SQL. И делает что угодно и очень быстро.
Но match вроде то же позволяет сделать. Я вообще разницу не очень понял...
...
Рейтинг: 0 / 0
21.01.2006, 06:46
    #33495404
Andyn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше организовать поиск по dw?
Match позволяет использовать шаблоны для поиска

PB Help - Match DataWindow expression functionThis pattern matches:

AB
Any string that contains AB; for example, ABA, DEABC, graphAB_one

B*
Any string that contains 0 or more Bs; for example, AC, B, BB, BBB, ABBBC, and so on

AB*C
Any string containing the pattern AC or ABC or ABBC, and so on (0 or more Bs)

^[ABC]
Any string starting with A, B, or C

[^ABC]
A string containing any characters other than A, B, or C

^[0-9]+$
Any string consisting only of digits
и тому подобное.

LIKE может работать только с явно заданными подстроками поиска, например, col_1 like '%AB%' и match(col_1, 'AB') работают одинаково, а вот отработать как последний шаблон в приведенной цитате LIKE не сможет.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как лучше организовать поиск по dw? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]