powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Find
16 сообщений из 16, страница 1 из 1
Find
    #32808846
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Код: plaintext
1.
long ll_found
ll_found = dw_1.Find("k_prd = 01.01.2004", 1 , dw_1.RowCount())
в данном скрипте ругается.

Вообщем как для даты сделать поиск
===================
РВ 9,0,2
...
Рейтинг: 0 / 0
Find
    #32808873
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPROВсем привет!

Код: plaintext
1.
long ll_found
ll_found = dw_1.Find("k_prd = 01.01.2004", 1 , dw_1.RowCount())
в данном скрипте ругается.

Вообщем как для даты сделать поиск
===================
РВ 9,0,2
Код: plaintext
1.
long ll_found
ll_found = dw_1.Find("k_prd = '01.01.2004'", 1 , dw_1.RowCount())
или
Код: plaintext
1.
long ll_found
ll_found = dw_1.Find('k_prd = "01.01.2004"', 1 , dw_1.RowCount())
как больше нравится.
...
Рейтинг: 0 / 0
Find
    #32808919
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставлю вопрос немного по другому
Есть такой скрипт (это у меня что то поиска как в windows)

Код: 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.
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

ls_dw_obj_name = ls_dw_cname//String(ivdw_dw.getcolumnname())
if ls_dw_obj_name = '-1' then return

if key = KeyEscape! or ls_dw_obj_name = 'row_sel' then
	ivdw_dw.setfocus( )
	this.visible = false
	RETURN
end if

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

//sle_1.text = ls_find
ll_find = ivdw_dw.find(ls_find,  1 , ll_RC)
ivdw_dw.setrow( ll_find )

вообщем если поле текст то все ОК
если date или dicimal() то выходит ошибка

DataWindow
Expecting STRING expression

Может кто разъяснит как от неё избавится?!
===============================
PB 9.0.2 ASA 9.0.2
...
Рейтинг: 0 / 0
Find
    #32808995
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте в выражении поиска использовать Date() и Dec() для соответствующих величин. Т.е. примерно так:
ll_found = dw_1.Find("k_prd = Date(' 01.01.2004 ') ",1, dw_1.RowCount())
и
ll_found = dw_1.Find("k_prd = Dec( 11.01 ) ",1, dw_1.RowCount())

Выражение поиска требует точного собюдения и приведения типов.

И, кстати, дату лучше передавать всетаки в более универсальном формате:
Код: plaintext
Date('YYYY-MM-DD')
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Find
    #32809015
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPRO...вообщем если поле текст то все ОК
если date или dicimal() то выходит ошибка

DataWindow
Expecting STRING expression

Может кто разъяснит как от неё избавится?!

Вы хоть понимаете, что именно формируется у вас в переменной ls_find?
Нельзя применять функции, которые требуют строкового аргумента, к числу или дате, надо хотя бы предварительно выполнить приведение типов. Именно об этом вам и говорит сообщение об ошибке.
Отладчиком не пробовали пользоваться?
...
Рейтинг: 0 / 0
Find
    #32809076
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хоть понимаете что именно формируется у вас в переменной ls_find?
Но естественно! ;))

Код: plaintext
Отладчиком не пробовали пользоваться?
Признаюсь чесно, еще не пробывал следовательно не умею!

Спасибо засоветы!
...
Рейтинг: 0 / 0
Find
    #32810901
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С датой то все получилось, а вот как быть если пользователь в поле писка ввел только 2 знака (у меня сразу производит поиск как только введен символ) например 06, т.е. теперь надо найти первую строку у которой дата начинается на 06, как теперь быть то???
...
Рейтинг: 0 / 0
Find
    #32811179
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPROС датой то все получилось, а вот как быть если пользователь в поле писка ввел только 2 знака (у меня сразу производит поиск как только введен символ) например 06, т.е. теперь надо найти первую строку у которой дата начинается на 06, как теперь быть то???А если пользователь ввел например 6 , то надо найти строку которая начинается на 06.
А если пользователь ввел например 2 , то надо найти строку которая начинается на 02 или на 2 (20-29).
А...
Вы любые телодвижения отслеживать собираетесь?

Сделайте кнопку "Поиск" и пусть себе нажимают, по крайней мере, будут отдавать себе отчет в том, что они ищут...

Ну и lookupdisplay вам поможет, об этом мы уже говорили...
http://www.sql.ru/forum/actualthread.aspx?tid=132384&hl=lookupdisplay#1071419
...
Рейтинг: 0 / 0
Find
    #32811589
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
А если пользователь ввел например  6 , то надо найти строку которая начинается на  06 .
А если пользователь ввел например  2 , то надо найти строку которая начинается на  02  или на  2  ( 20 - 29 ). 
А...
Вы любые телодвижения отслеживать собираетесь? 
Да, конечно ослеживать надо все.
А если пользователь ввел например 2, то надо найти строку которая начинается на 2
А если пользователь ввел например *2, то надо найти строку в которой есть 2
(* - как и в windows любые символы)
А если пользователь ввел например *2*3, то надо найти строку в которой есть 2 и после этого символа, через любое кол-во символов есть 3
В принципе мой скрип который я написал, это выполняет только для текстовых полей ;(( а надобно для всех! Пока ничего не выходит ;((
...
Рейтинг: 0 / 0
Find
    #32811598
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будем мучать lookupdisplay
===============================
PB 9.0.1 (7236) ASA 9.0.0 (1312)
...
Рейтинг: 0 / 0
Find
    #32811692
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не надо мучаться. Не помню как по латыни, по-русски звучит так: о чем бы вы не подумали, об этом уже кто-то подумал. Посмотрите тут и вот тут , и готовый объект в файле
Успехов!
...
Рейтинг: 0 / 0
Find
    #32811841
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
не надо мучаться. 
В моем случае мучатся означает изучать.
Код: plaintext
Не помню как по латыни, по-русски звучит так: о чем бы вы не подумали, об этом уже кто-то подумал.
Дело не втом что кто подумал, а что и как реализовал ;))
Код: plaintext
Посмотрите тут и вот тут, и готовый объект в файле
Спасибо. Ну там блин и скрипты. Мне проще свой доработать ;))
...
Рейтинг: 0 / 0
Find
    #32812074
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DIGITALPROА если пользователь ввел например *2, то надо найти строку в которой есть 2
(* - как и в windows любые символы)Не надо мудрить - все гораздо проще.
почитайте про функцию match().
заменяйте <*> на <.*>
т.е. Match( your_string, '.*2.*') найдет строку содержащую 2
Пользователей конечно не надо заставлять учить язык который понимает Match, но можно придумать свой попроще, и простыми заменами формировать нужный шаблон поиска.
...
Рейтинг: 0 / 0
Find
    #32812258
DIGITALPRO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
О Match я еще не слышал и не изучал, просто спросил, как то, как найти запись, сказали find
...
Рейтинг: 0 / 0
Find
    #32812302
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во избежание недопонимания,
Match следует использовать внутри выражения для Find:
Код: plaintext
dw_1.Find("Match(гдеищем, что_ищем)")
...
Рейтинг: 0 / 0
Find
    #32812563
Фотография voronk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лови, осторожнее с форматом, я в "comment" блоке переконвертировал так как я пассую "date", но это как говорят французы: "totaly up to you".

long l_found
string s_date, s_search

s_date = string('01.01.2004')

/********************************************/

long l_year, l_month, l_day
date dt_date

dt_date = '01.01.2004'

l_year = Year(dt_date)
l_nonth = Month(dt_date)
l_day = Day(dt_date)

dt_date = Date(l_year, l_month, l_day)
s_date = string(dt_date)
/********************************************/

s_search = "k_prd = DateTime ('" + s_date + "')"

l_found = dw_1.Find(s_search, 1, dw_1.RowCount())
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Find
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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