Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Форма поиска / 11 сообщений из 11, страница 1 из 1
18.01.2012, 16:09
    #37620415
nata220
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
Здравствуйте! Помогите, пожалуйста, с созданием формы поиска на FoxPro. В базе данных две таблицы "Список" и "программа" связаны по ключу "Номер заявки" отношением один ко многим. На форме присутствует Grid дочерней таблицы, textbox и кнопка. В textbox вводится значение поля родительской таблицы, необходимо все соответствующие записи дочерней таблицы вывести в Grid. Я написала код, который выводит только первую встретившуюся запись, подскажите, пожалуйста, как переделать, чтобы выводил все записи удовлетворяющие условию. 2) как переделать программу, если вместо textbox использовать combobox.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
d=alltrim(thisform.container1.Text1.Value)
if len(d)!=0
locate for alltrim(spisok.fam)==d
if found()
thisForm.grdProgram
thisform.container1.command1.SetFocus
else

MessageBox ('Нет совпадений!' , 0+48)
thisform.container1.Text1.SetFocus
endif

endif

Заранее благодарю!
...
Рейтинг: 0 / 0
18.01.2012, 16:46
    #37620530
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
nata220Здравствуйте! Помогите, пожалуйста, с созданием формы поиска на FoxPro. В базе данных две таблицы "Список" и "программа" связаны по ключу "Номер заявки" отношением один ко многим. На форме присутствует Grid дочерней таблицы, textbox и кнопка. В textbox вводится значение поля родительской таблицы, необходимо все соответствующие записи дочерней таблицы вывести в Grid. Я написала код, который выводит только первую встретившуюся запись, подскажите, пожалуйста, как переделать, чтобы выводил все записи удовлетворяющие условию. 2) как переделать программу, если вместо textbox использовать combobox.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
d=alltrim(thisform.container1.Text1.Value)
*!* if len(d)!=0
IF NOT EMPTY(d)
SELECT spisok.fam
SET FILTER TO spisok.fam = d
GO TOP
*!*locate for alltrim(spisok.fam)==d
*!*if found()
*!*thisForm.grdProgram
*!*thisform.container1.command1.SetFocus
*!*else

*!*MessageBox ('Нет совпадений!' , 0+48)
Refresh Grid'a
thisform.container1.Text1.SetFocus
*!*endif

endif

Заранее благодарю!
...
Рейтинг: 0 / 0
19.01.2012, 12:47
    #37621889
Grin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
2nata220,

Делайте как написал IgorNG через SET FILTER TO
Ну или как вариант через Select SQL

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
d=alltrim(thisform.container1.Text1.Value)

m.zapros='SELECT * '+;
'from spisok '+;
'where alltrim(spisok.fam)==d into curs cur1 '

thisform.grid1.RecordSourceType= 4
thisform.grid1.RecordSource=m.zapros
thisform.grid1.Refresh



для использования combobox
d=alltrim(thisform.container1.combobox.Value)
...
Рейтинг: 0 / 0
19.01.2012, 12:49
    #37621898
Grin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
Только имейте ввиду что источник данных для Вашего грида изменился на временный курсор, соответственно править данные в гриде не получиться.
...
Рейтинг: 0 / 0
19.01.2012, 16:50
    #37622691
nata220
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
Здравствуйте, спасибо большое за предложения. Попробовала сделать так, как написал IgorNG, но выдает ошибку. Написала следующии код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
d=alltrim(thisform.container1.Text1.Value)
if len(d)!=0

SET FILTER TO spisok.fam = d
GO TOP
if !EOF()
thisForm.grdProgram
thisform.container1.command1.SetFocus
else

MessageBox ('Нет совпадений!' , 0+48)
thisform.container1.Text1.SetFocus
endif

endif


Но выдает по-прежнему только первую встретившуюся запись, а хотелось бы, чтобы выдавались все соответствующие записи. Такое ощущение, что не хватает какого то цикла (может DO WHILE ). Еще есть идея находить в таблице spisok поля spisok.fam = d, записывать значение их ключа (n_zayav) в новый массив, и по этим записям искать соответствующие записи в дочерней таблице program. (таблицы spisok и program связаны по ключу n_zayav отношением один -ко- многим )
...
Рейтинг: 0 / 0
19.01.2012, 17:02
    #37622725
nata220
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
Но я не знаю как идею реализовать?
...
Рейтинг: 0 / 0
19.01.2012, 17:29
    #37622787
IgorNG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
nata220,

Создаешь форму с гридом и кнопкой "Поиск". По этой кнопке вызываешь форму с текстовым полем и кнопкой "ОК", в текстовое поле вводится какое-то значение, нажимается кнопка ОК, форма убирается. Устанавливается фильтр по выбранному значению и отображается в гриде. Литературу читать надо - это классика.
...
Рейтинг: 0 / 0
19.01.2012, 17:53
    #37622849
Penner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
авторПо этой кнопке вызываешь форму с текстовым полем и кнопкой "ОК"
Inputbox()
...
Рейтинг: 0 / 0
23.01.2012, 19:17
    #37627781
nata220
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
Спасибо большое, вроде сделала!
Возникло еще два вопроса:
1) как связать между собой два combobox'a. Первая таблица istoch (источники), ключ istoch C(10), вторая таблица l_istoch (библиотеки) l_istoch C(10), istoch C(10). Таблицы связаны по ключу istoch отношением один ко многим. Нужно чтобы по выбранному источнику из первой таблицы выбрать только те библиотеки, которые к нему относятся.
2)как сделать, чтобы при добавлении новой записи вычислялся максимум ключа, и значению ключа новой записи присваивалось значение max+1?
...
Рейтинг: 0 / 0
23.01.2012, 21:01
    #37627887
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
nata220,

2) Integer AutoInc

1) для второго комбо
Код: plaintext
1.
2.
rowsource = 'select * from l_istoch where l_istoch.istoch = istoch.istoch'
rowsourcetype = 3



в будущем давайте более информативные имена полям и таблицам
...
Рейтинг: 0 / 0
23.01.2012, 21:01
    #37627889
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Форма поиска
nata220,

2) Integer AutoInc

1) для второго комбо
Код: plaintext
1.
2.
rowsource = 'select * from l_istoch where l_istoch.istoch = istoch.istoch'
rowsourcetype = 3



в будущем давайте более информативные имена полям и таблицам
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Форма поиска / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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