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

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

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

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

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

Имеем 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
Как лучше организовать поиск по dw?
    #33494011
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот не пойму, а чем LIKE не нравится ? Он и в поиске и фильтре работает, по функционалу не уступает LIKE в SQL. И делает что угодно и очень быстро.
...
Рейтинг: 0 / 0
Как лучше организовать поиск по dw?
    #33494272
KleveRR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ASCRUSЯ вот не пойму, а чем LIKE не нравится ? Он и в поиске и фильтре работает, по функционалу не уступает LIKE в SQL. И делает что угодно и очень быстро.
Но match вроде то же позволяет сделать. Я вообще разницу не очень понял...
...
Рейтинг: 0 / 0
Как лучше организовать поиск по dw?
    #33495404
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
11 сообщений из 11, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как лучше организовать поиск по dw?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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