Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проверка условий в БД. [D7, MS Acces]


Страницы:   1 2

TimScorp ©   (2006-01-25 07:47:00) 

Уважаемые Дамы и Господа!

Сильно ногами не пинать.
Вопрос в следующем: имеем таблицу с 6 полями, типа адреса (город, мкр-н, улица, дом, корп, кв). Некоторые из них заполнены, некоторые нет (например есть город, улица и дом, остальные пустые). При поиске пользователю дается окно с 6 полями для ввода он вводит что-то из адреса (например: город или город и дом, остальные пустые), как мне сделать проверку совпадений и закинуть все совпадения в массив. Отображение в окне типа DBGrid не устраивает. А 41 (точно не помню но много) проверку с помощью if долго и муторно.

С уважением TimScorp.


Desdechado   (2006-01-25 21:09:00) [21]

конструируешь запрос из кусочков
если дом введен, добавляешь кусочек "AND дом LIKE :p3"
кстати, случай поиска ПУСТОГО дома предусмотрен?


TimScorp   (2006-01-25 19:15:00) [22]

to Desdechado

С толком.

В БД есть такие поля как город, мкр, улица, дом, корп, квартира.

Допустим адрес: Ашхабад, ул. Андалиба д. 15, кв. 7

Теперь пользователю предлагается окно в котором он должен ввести условия для поиска: В окне поля для ввода: город, мкр, улица, дом, корп, квартира. Он может ввести:
1. в поле город - Ашхабад (все остальные поля пустые) - программа должна найти вышеуказанный адрес.
2. в поле город - Ашхабад в поле дом - 15 (остальные четыре поля пустые) - должна найти адрес.
3. в поле до 15 в поле квартира 7 - тоже должна найти

и т.д.

Вот тут как проверять???

С уважением TimScorp.


Desdechado   (2006-01-25 19:04:00) [23]

> а если введен токо город и дом при этом он найдет в базе данные если в
> базе еще есть улица и квартира а введенных данных нет???
а теперь с толком, с расстановкой и со знаками препинания


TimScorp   (2006-01-25 18:50:00) [24]

to Desdechado


> SELECT * FROM tabl
> WHERE город LIKE :p1 AND улица LIKE :p2 AND дом LIKE :p3
> AND корпус LIKE :p4 AND подъезд LIKE :p5 AND квартира LIKE
> :p6
> ORDER BY фамилия


а если введен токо город и дом при этом он найдет в базе данные если в базе еще есть улица и квартира а введенных данных нет???

to Digitman

ОК. так попробую. вопрос следующий мне нужно потом эти данные выводить не в таблице а иметь доступ к каждому полю в отдельности. Также есть вторая таблица связанная с первой допустим по фамилии. В основной таблице есть один адрес, в связанной на одну и ту же фамилию может быть много адресов, вот их мне пото нужно написать в Memo поле. Так как быть если можно поподробней. если можешь напиши timscorp@mail.ru

С уважением TimScorp.


msguns   (2006-01-25 13:00:00) [25]

>Сильно ногами не пинать.

Щас запинают ;)


Desdechado   (2006-01-25 11:34:00) [26]

зачем "по базе пошагово"? комсомолец, что ли?

SELECT * FROM tabl
WHERE город LIKE :p1 AND улица LIKE :p2 AND дом LIKE :p3 AND корпус LIKE :p4 AND подъезд LIKE :p5 AND квартира LIKE :p6
ORDER BY фамилия


Johnmen   (2006-01-25 10:39:00) [27]

>Если без SQL запроса

:)
Взаимодействие с базами данных осуществляется толькозапросами. Либо явными, либо нет...


Digitman   (2006-01-25 10:32:00) [28]


> потом отобранные данные будут в ListBox'е


Они и так там будут, без твоего явного участия в его заполнении.
Достаточно использовать DBListBox.


> Если без SQL запроса а просто по базе пошагово идти и пользоваться
> if-ом то около 41


Зачем изобретать велосипед и создавать себе трудности ?
Борланд все уже за тебя сделал, осталось грамотно воспользоваться соотв.возможностями.

Например, TTable имеет св-во Filter, позволяющее задать условие фильтрации записей, и св-во Filtered, вкючающее/отключающее фильтрацию.
Все что тебе нужно - установить должным образом св-во Filter и установить Filtered = True.
А чтобы отфильтрованный НД был показан юзеру, назначь

DBListBox.Dataset = Table


TimScorp   (2006-01-25 09:18:00) [29]

to Digitman

Мне они нужны в массиве.

принцип в том что потом отобранные данные будут в ListBox'е и пользователь сам должен выбрать какой из адресов ему нужен, после чего будет выводится форма с данными результатами, таблица типа DBGrid не устраивает!


> Откуда 41-то ? Если полей всего 6 ?
> Для каждой записи в таблице в ходе исполнения SQL-запроса
> будет выполнено не более 6-ти "проверок", по числу полей
> в таблице, и если значения полей в проверяемой записи соответствуют
> условиям отбора, запись будет помещена в результирующий
> НД.


Если без SQL запроса а просто по базе пошагово идти и пользоваться if-ом то около 41.

Пример (+ - введеное значение пользователем, 0 - не введенное):

+00000
0+0000
00+000
000+00
0000+0
00000+

и т.д.

С уважением TimScorp.


Digitman   (2006-01-25 09:05:00) [30]


> закинуть все совпадения в массив


А зачем ?

После выполнения соответствующего селективного SQL-запроса результирующий НД будет содержать только те записи, которые удовлетворяют условиям поиска. Остается только воспользоваться методами навигации по НД для доступа к любой из интересующих записей в нем.


> 41 (точно не помню но много) проверку


Откуда 41-то ? Если полей всего 6 ?
Для каждой записи в таблице в ходе исполнения SQL-запроса будет выполнено не более 6-ти "проверок", по числу полей в таблице, и если значения полей в проверяемой записи соответствуют условиям отбора, запись будет помещена в результирующий НД.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо