Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 125
от 02.05.2006, 14:05

Администратор:CJ
В рассылке:Подписчиков: 204, Экспертов: 32
В номере:Вопросов: 2, Ответов: 3


Вопрос № 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 будет вводиться фамилия. Очень нужна ваша помощь. Заранее благодарен!

Приложение:

Отправлен: 26.04.2006, 13:46
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: 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 ведь есть только номера, а текстовые значение хранятся в подчиненных таблицах.
Заранее благодарен!
Отправлен: 27.04.2006, 13:05
Вопрос задал: Андрющенко Вячеслав Васильевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Андрющенко Вячеслав Васильевич!

Для выбора значений из списка лучше использовать 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 ;"

С уважением.
Ответ отправил: Филатов Евгений Геннадьевич (статус: 2-ой класс)
Ответ отправлен: 27.04.2006, 15:27

Отвечает: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.31 от 28.04.2006
Яндекс Rambler's Top100

В избранное