powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Форма поиска
11 сообщений из 11, страница 1 из 1
Форма поиска
    #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
Форма поиска
    #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
Форма поиска
    #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
Форма поиска
    #37621898
Grin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только имейте ввиду что источник данных для Вашего грида изменился на временный курсор, соответственно править данные в гриде не получиться.
...
Рейтинг: 0 / 0
Форма поиска
    #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
Форма поиска
    #37622725
nata220
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но я не знаю как идею реализовать?
...
Рейтинг: 0 / 0
Форма поиска
    #37622787
IgorNG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata220,

Создаешь форму с гридом и кнопкой "Поиск". По этой кнопке вызываешь форму с текстовым полем и кнопкой "ОК", в текстовое поле вводится какое-то значение, нажимается кнопка ОК, форма убирается. Устанавливается фильтр по выбранному значению и отображается в гриде. Литературу читать надо - это классика.
...
Рейтинг: 0 / 0
Форма поиска
    #37622849
Penner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПо этой кнопке вызываешь форму с текстовым полем и кнопкой "ОК"
Inputbox()
...
Рейтинг: 0 / 0
Форма поиска
    #37627781
nata220
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое, вроде сделала!
Возникло еще два вопроса:
1) как связать между собой два combobox'a. Первая таблица istoch (источники), ключ istoch C(10), вторая таблица l_istoch (библиотеки) l_istoch C(10), istoch C(10). Таблицы связаны по ключу istoch отношением один ко многим. Нужно чтобы по выбранному источнику из первой таблицы выбрать только те библиотеки, которые к нему относятся.
2)как сделать, чтобы при добавлении новой записи вычислялся максимум ключа, и значению ключа новой записи присваивалось значение max+1?
...
Рейтинг: 0 / 0
Форма поиска
    #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
Форма поиска
    #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
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Форма поиска
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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