Вопрос № 41338: Здравствуйте, уважаемые эксперты!
Мое приложение работает с MS Access. Есть две таблицы: в одной лежат данные:
id клиента, Имя,
а в другой:
id заказа, id клиента(который его заказал).
Мне нужно сделать поиск товаров клиента. Подск...Вопрос № 41438: Здравствуйте, уважаемые эксперты! Нужна ваша помощь!
У меня есть таблица
cars_info(id, название машины),
clients(id, ФИО),
cars(номер вагона, в котором находится машина, клиент(INT соотв. id второй таблицы), машина(INT соотв. id перв...
Вопрос № 41.338
Здравствуйте, уважаемые эксперты!
Мое приложение работает с MS Access. Есть две таблицы: в одной лежат данные:
id клиента, Имя,
а в другой:
id заказа, id клиента(который его заказал).
Мне нужно сделать поиск товаров клиента. Подскажите, пожалуйста, как это сделать? Ведь в таблице заказов лежат только номера клиентов, а в поле Edit будет вводиться фамилия. Очень нужна ваша помощь. Заранее благодарен!
Отвечает: Jadd
Здравствуйте, Андрющенко Вячеслав Васильевич!
Очень просто все. Есть конструкция JOIN в SQL. Таким образом мы пишем запрос:
select clients.name, orders.id from clients inner join orders on clients.id = orders.id where clients.name like трам-пам-пам. Вместо "трам-пам-пам" подставляете значение из EditFind.Text.
Примерно так.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал) Адрес: Санкт-Петербург WWW:http://www.sport-diary.ru ICQ: 28260749 ---- Ответ отправлен: 26.04.2006, 14:05
Вопрос № 41.438
Здравствуйте, уважаемые эксперты! Нужна ваша помощь!
У меня есть таблица
cars_info(id, название машины),
clients(id, ФИО),
cars(номер вагона, в котором находится машина, клиент(INT соотв. id второй таблицы), машина(INT соотв. id первой таблицы).
Я показываю машины определенного вагона. Подскажите, пожалуйста, как произвести поиск машин или клиентов? В таблице cars ведь есть только номера, а текстовые значение хранятся в подчиненных таблицах.
Заранее благодарен!
Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Андрющенко Вячеслав Васильевич!
Для выбора значений из списка лучше использовать ListBox или DBGrid, заполненный данными из справочника.
После получения текста для поиска в запросе указать:
SELECT *
FROM (cars AS c INNER JOIN cars_info AS i ON i.id=c.car) INNER JOIN clients AS n ON n.id=c.klient where i.name='ВАЗ 2104' and vagon=1
или
SELECT *
FROM (cars AS c INNER JOIN cars_info AS i ON i.id=c.car) INNER JOIN clients AS n ON n.id=c.klient where n.fio='Иванов Иван Иванович' and vagon=1
Вместо текста названия или имени можно подставить переменные:
Form1.Data1.RecordSource = "select .... where i.name='" & Form1.ListBox1.Text & "' and vagon=" & _Peremennaja_ & " ;"
Form1.Data1.Refresh
После обновления выведутся только те записи, которые удовлетворяют условию.
Интересный вариант получится, если в таблицы cars_info и clients добавить поле Sel типа boolean, а для отбора использовать DBGrid.
Перед началом отбора запустить
dbf.Execute "Update cars_info set sel=false" , где dbf настроен на рабочую базу.
В DBGrid разрешено изменение поля Sel.
Можно добавить процедуры
Private Sub DBGrid1_DblClick()
With Form1.Data2.Recordset
.Edit
!sel = Not !sel
.Update
End With
End Sub
Private Sub DBGrid1_KeyPress(KeyAscii As Integer)
With Form1.Data2.Recordset
.Edit
!sel = Not !sel
.Update
End With
End Sub
Тогда при двойном нажатии в любом месте строки или нажатия любой кливиши кроме стрелок будет помечаться строка для отбора.
После выбора нужных позиций пользователь нажимает кнопку, в процедуре обработки нажатия которой написано (например для клиентов):
Form1.Data1.RecordSource = "select .... where i.sel=true;"
Form1.Data1.Refresh
Выведется список для нескольких клиентов.
Можно соединять выбор машин и клиентов из двух списков на экране, тогда запрос будет вида
Form1.Data1.RecordSource = "select .... where i.sel=true and n.sel=true ;"
Отвечает: Kazakh
Здравствуйте, Андрющенко Вячеслав Васильевич!
Дабалю
Поиск по ФИО
------------------------------------------
SELECT Cl.ФИО, ci.название_машины, с.номер_вагона // можно добавить ещё полей
from clients сl, cars_info ci, cars с
where
с.машина = сi.id
and с.клиент = cl.id
and с.номер_вагона = 4
and cl.ФИО = 'ИВАНОВ ИВАН ИВАНЫЧ'
------------------------------------------
если сменить последнюю строку
and cl.ФИО = 'ИВАНОВ ИВАН ИВАНЫЧ'
на
and ci.название = 'Bugatti'
то можно искать по названию машины
Удобнее будет использовать параметрические запросы.
Если не знаете как, то пишите.
--------- Если собеседник затрудняется ответить, значит, вопрос поставлен правильно.
Ответ отправил: Kazakh (статус: 6-ой класс)
Ответ отправлен: 28.04.2006, 07:43