Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Поиск (снова) / 25 сообщений из 26, страница 1 из 2
21.09.2003, 10:48
    #32271075
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
привет всем -я новичок так, что не ругайте
Искал я сдесь на форуме (ответы на тему "поиск" но они меня не удовлетворили).
а теперь вопрос есть база SAD.DBF И поля dr(nr),fam(c) как мне сделать на форме, точнее организовать его по полю fam
1-есть форма - "Form1", на форме есть listbox -"list1", в свойствах кейпрес на листбоксе мне нужно организовать поиск по буквам, т.е. при вводе буквы "П" все записи которые начинаются в базе на букву "П" остовались далее при нажатии буквы "е" - оставались записи "ПЕ" - и. т.д. я знаю, что в wizarde ЕСТЬ ПРИМЕРЫ и там поиск организован по анг.словам - думал перенести поиск на свою форма не получается
...
Рейтинг: 0 / 0
21.09.2003, 11:05
    #32271079
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Мало чего понял, но можно сделать через select
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
LPARAMETERS nKeyCode, nShiftAltCtrl
IF BETWEEN(nKeyCode, 224 , 255 )
	thisform.Tag=thisform.Tag+CHR(nKeyCode)
	this.RowSourceType=  3  
	this.RowSource='select fam from sad where fam like "' + thisform.Tag + _
	'%" into cursor temp'
	this.refresh
ENDIF 
...
Рейтинг: 0 / 0
21.09.2003, 11:24
    #32271088
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Спасибо почти это
...
Рейтинг: 0 / 0
21.09.2003, 11:36
    #32271091
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
вопрос к nnn - а как мне сделать паузу т.е. интервал между нажатием буквы следующей после найденного, а то я при нажитии первой буквы он выводит фамилию первую в найденной и есля я ввожу буквы с паузой он перескакивает на букву которую я ввожу вторую. и еще вопрос а почему этот код не оставляет в листбоксе те фамилии которые остались а просто перескаакивает на ту записть которая соответствует условию.?
...
Рейтинг: 0 / 0
21.09.2003, 14:08
    #32271117
Андрей Давыдов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Точный код написать не могу т.к. зависит от св-в ListBox'a.
Можно Примерно Так:

PROC KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
LOCAL lcSearch
lcSearch=''
DO WHILE BETWEEN(nKeyCode,224,255) &&
lcSearch=lcSearch+CHR(nKeyCode) && Можно предусмотреть нажатие BackSpace
LOCATE FOR ..., SEEK(),INDEXSEEK() - ищем подходящую строку в зав-ти от источника данных, наличия индексов
Меняем значения ListBox'a - перемещяем на нужную строку
nKeyCode=INKEY(0.5) && Интервал Ожидания Нажатия Клавы
ENDDO
ENDPROC

ИМХО Для табличных данных лутше использовать Грид
...
Рейтинг: 0 / 0
21.09.2003, 14:17
    #32271118
Андрей Давыдов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
>LOCATE FOR ..., SEEK(),INDEXSEEK() - ищем подходящую строку в зав-ти от источника данных, наличия индексов

Извиняюсь. Не обратил внимания что нужна выборка. Конечно же SELECT...
...
Рейтинг: 0 / 0
21.09.2003, 14:37
    #32271123
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
2Гриша

Прыжки проиходят из-за того, что при нажатии клавиши происходит переход на элемент, с соотвествующей первой буквой. В принципе, это должно включаться/отключаться через свойство IncrementalSearch (see help for more info)
Честно говоря, я не проверил пред. код. След. код у меня работает, предварительно для ListBox установлено. Обрати внимаение на NODEFAULT, он отменяет действие по умолчанию, т.е. эти самые 'прыжки'.
.RowSourceType= 3
.RowSource='select fam from sad into cursor temp order by fam'
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
*!* List.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF BETWEEN(nKeyCode,  224 , 255 )  &&  192 ;- 255 ;
	NODEFAULT
	this.Tag=this.Tag+CHR(nKeyCode)
	this.RowSourceType=  3  
	this.RowSource='select fam from sad where fam like "'+this.tag+ ;
	'%" into cursor temp order by fam'
	this.ListIndex= 1 
ENDIF 
IF nKeyCode= 27  && Esc
	this.Tag=''
	this.RowSourceType=  3  
	this.RowSource='select fam from sad into cursor temp order by fam'
	this.ListIndex= 1 
ENDIF 
...
Рейтинг: 0 / 0
22.09.2003, 08:53
    #32271293
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
СПАСИБО ВСЕМ КТО ОТВЕТИЛ
ПОЛУЧИЛОСЬ - ВОПРОСИК ТАКОЙ А ТЕПЕРЬ КАК МОЖНО МНЕ СДЕЛАТЬ:
ЧТО БЫ ДВОЙНЫМ ЩЕЛЧКОМ Я ПЕРЕДОДИЛ В СОЗДАННУЮ ФОРМУ И ЭТА ЗАПИСЬ БЫЛА БЫ НА ФОРМЕ?
Я ДУМАЮ МОЖЕТ В МЕТОДЕ DOUBLEKEY прописать путь на форму?
...
Рейтинг: 0 / 0
22.09.2003, 09:20
    #32271309
Дмитрий Петров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
>вопрос к nnn - а как мне сделать паузу т.е. интервал между нажатием буквы >следующей после найденного, а то я при нажитии первой буквы он выводит >фамилию первую в найденной и есля я ввожу буквы с паузой он ....

Скорость обработки можно притормозить так.
В gotfocus() ставим системной переменной
_dblclick=2.5
в LostFocus() возвращаем зн. по умолчанию
_dblclick=0.5
...
Рейтинг: 0 / 0
22.09.2003, 10:36
    #32271365
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
2Гриша

Ты хочешь, чтобы по двойному щелчку на листбоксе открывалась новая форма?
Код: plaintext
1.
2.
3.
4.
5.
*!* ListBox.DblClick
do form NewForm with this.value

*!* NewForm.Init
lparameters cParam
this.Caption=cParam
...
Рейтинг: 0 / 0
22.09.2003, 11:23
    #32271421
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
что то я вообще запутался -- ????
ставлю последний код в свойства кей пресс при начатии буквы листбокс становится пустым - я неверное что то не то делаю?
заранне поставил в
RowSourceType= 3
RowSource='select fam from sad into cursor temp order by fam'
...
Рейтинг: 0 / 0
22.09.2003, 11:38
    #32271446
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
2Гриша

> ставлю последний код в свойства кей пресс при начатии буквы листбокс становится пустым - я неверное что то не то делаю?

Просто ты наверное вводишь строчную букву, а фамилия у тебя начинается с прописной, вот он ничего ине находит. Попробуй так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	NODEFAULT

	this.Tag=this.Tag+UPPER(CHR(nKeyCode)) && изменено

	this.RowSourceType=  3  
	this.RowSource='select fam from sad where upper(fam) like "'+this.tag+ ;

	'%" into cursor temp order by fam' && изменено

	this.ListIndex= 1 
...
Рейтинг: 0 / 0
22.09.2003, 11:51
    #32271477
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Спасибо получилось , но при нажатии на каждую букву "этот код требует чтобы я открывал каждый раз базу sad" т.е. я ставлю букву п у меня выскакивает сообщение "open" И Я ДОЛЖЕН ОТКРЫТЬ ЭТОТ ФАЙЛ А КОГДА Я СТАВЛЮ ВТОРУЮ БУКВУ Т.Е. ПОСЛЕ "П", "Е" - ПРОГРАММА СПРАШИВАЕТ МЕНЯ ОТКРЫТЬ SAD - 2 РАЗА ?
...
Рейтинг: 0 / 0
22.09.2003, 11:57
    #32271492
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
2Гриша

Дык надо было открыт таблицу за ранее. Что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
*!* Form.Load
use sad in  0 

*!* Form.Unload
if used('sad')
   use in sad
endif
if used('temp')
   use in temp
endif
...
Рейтинг: 0 / 0
22.09.2003, 12:54
    #32271594
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
ПОЛУЧИЛОСЬ ПОЛУЧИЛОСЬ - СПАСИБО
...
Рейтинг: 0 / 0
22.09.2003, 13:31
    #32271664
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Ты хочешь, чтобы по двойному щелчку на листбоксе открывалась новая форма?
*!* ListBox.DblClick
do form NewForm with this.value

*!* NewForm.Init
lparameters cParam
this.Caption=cParam
**************************************
НО ПРИ ЗАПУСКЕ НОВОЙ ФОРМЫ ТОЛЬКО НАДПИСЬ ОКНА ОСТАЕТСЯ, А ЗНАЧЕНИЕ В НОВОЙ ФОРМЕ В ТЕХBOX-а высвечиваются первые по записи в базе.
а как мне перенисти найденное значение в текстбокс?
...
Рейтинг: 0 / 0
22.09.2003, 15:16
    #32271841
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
ПОМОЩЬ ЕЩЕ НУЖНА!!!!
...
Рейтинг: 0 / 0
22.09.2003, 15:43
    #32271885
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
2Гриша

Если у тебя во втрой форме контролы привязаны к таблице sad, то можно просто переместить указатель в этой таблице.
Можно несколько наводящих вопросов?
1. Какая версия vfp?
2. Во второй форме кроме поля fam что-нибудь еще выводится/редактируется?
3. Поле dr уникально?
4. Какие есть индексы?
...
Рейтинг: 0 / 0
22.09.2003, 16:49
    #32271984
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Если у тебя во втрой форме контролы привязаны к таблице sad, то можно просто переместить указатель в этой таблице.
ВОПРОС А КАК ПЕРЕТАЩИТЬ? - "УКАЗАТЕЛЬ"
Можно несколько наводящих вопросов?
1. Какая версия vfp? - 8 ЕСТЬ ТАК ЖЕ 6
2. Во второй форме кроме поля fam что-нибудь еще выводится/редактируется? - ДА
3. Поле dr уникально? ДА -
4. Какие есть индексы? ИНДЕКС ПО DR И ПО FAM - REGUL
...
Рейтинг: 0 / 0
22.09.2003, 17:06
    #32272019
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Понятнее.
Прежде всего нужно измениеть выражение select для rowsource, добавив поле dr (оно не будет выводиться в ListBox, но по нему можно будет ориентироваться) для всех случаев:
this.RowSource='select fam from sad, dr into cursor temp order by fam'
Перейти к нужной записи в этом случае можно будет с помощью INDEXSEEK():
Код: plaintext
1.
2.
IF INDEXSEEK(temp.dr, .T., 'sad', 'dr')
   DO FORM NewForm
ENDIF

Параметры в этом случае не нужны.
...
Рейтинг: 0 / 0
23.09.2003, 08:40
    #32272406
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Здравствуйте
Прежде всего нужно измениеть выражение select для rowsource, добавив поле dr - сделал
this.RowSource='select fam from sad, dr into cursor temp order by fam'

Перейти к нужной записи в этом случае можно будет с помощью INDEXSEEK():

но теперь когда я перехожу в выбранную форму - пишет ошибка "Data tupe is invaild for this property" - я не пой му что оно означает - тип дата поврежденный для этого выражения?
...
Рейтинг: 0 / 0
23.09.2003, 14:43
    #32273026
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
2Гриша

А на чем спотыкается, в какой строке ошибка?
...
Рейтинг: 0 / 0
23.09.2003, 14:54
    #32273051
Гриша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Здравствуй NNN
ПРИ ЗАПУСКЕ ФОРМЫ ПОИСК - МОЖНО Я СКИНУ ТЕБЕ НА ТВОЙ АДРЕС ДВЕ ФОРМЫ И БАЗУ И ТЫ ПОСМОТРИШЬ? РАЗМЕР 44 КБ
...
Рейтинг: 0 / 0
23.09.2003, 15:07
    #32273081
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.09.2008, 16:55
    #35549512
qasd
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск (снова)
Я хотел тоже самый делать (на этом же примере) но у меня что то не получается. Что я не так делаю, помогите пожалуйста. Вот мой пример:sad.rar
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Поиск (снова) / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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