![]() |
|
|
![]()
|
|
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 2 Всего: 61 |
Короче, вот пример проектика "поиск по базе данных"
Он включает в себя три вида поиска: 1) строка целиком; 2) каждое слово из строки; 3) Смешанный поиск. Из компонентов быз данных используется всего лишь три вещи: Query, DataBase, DBGrid (для вывода инфы). Короче, там всё понятно. Постарался реализовать
P. S. Использована таблица Paradox, но всё это через ADOQuery будет выглядеть так же... Присоединённый файл ( Кол-во скачиваний: 21 )
SearchDB.rar |
|||
|
||||
| Vorona |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 12.10.2004 Где: Украина, Днепропе тровск Репутация: нет Всего: 2 |
Pakshin A. S.
Подскажи пожалуйста, что такое '%' и '*'. Это ASCII-коды? Если да, то чего? А #39 - это пробел? |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 2 Всего: 61 |
'%' - символ для SQL запроса, означающий, что после некоторого сочетания символов до знака % может стоять сколько угодно символов
Пример: есть две записи asdf ased Используя запрос с where Something Like 'as%' Мы получим эти две записи. '*' - символ, взятый из поиска файлов в Wind'е. Т. е. привычный заменитель сивола % для SQL... #39 - одна ковычка ' ASCII код - число, напимер 39 - это код символа ' |
|||
|
||||
| Pakshin A. S. |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 2 Всего: 61 |
|
||||
|
|||||
| Vorona |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 12.10.2004 Где: Украина, Днепропе тровск Репутация: нет Всего: 2 |
щас проверим
|
|||
|
||||
| Vorona |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 12.10.2004 Где: Украина, Днепропе тровск Репутация: нет Всего: 2 |
Pakshin A. S.
Маленький вопросик: имеем к примеру в базе списочек -абрикос -ананас -апельсин при использовании ORDER BY при введении буквы а оно почему-то переводит курсор на апельсин, а надо бы на абрикос как быть? |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 2 Всего: 61 |
А если так?
|
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 2 Всего: 61 |
100% запрос!!! |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Так ну 1 что я вижу это то, что в строке подключения не задан Locale Identifier я бы написал так
Второе не совсем понятно как была создана таблица, установлена ли кодировка символов и COLLATE при создании поля. Но на сколько мне известно COLLATE можно установить и при выполнении sql запроса. Как это делается в InterBase и его клонах написано здесь http://www.ibase.ru/devinfo/ibrusfaq.htm Для вашего случая я бы вам посоветовал написать ORDER BY SomeField COLLATE cp1251 -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Vorona |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 12.10.2004 Где: Украина, Днепропе тровск Репутация: нет Всего: 2 |
Pakshin A. S.
со * не проходит, у меня первое поле - счетчик, оно мне и выдает его я пробовала нажать два раза на объект ADOQuery, там в окошке ( не знаю как оно называется) добавить все записи, а потом оставить только нужную, но тогда курсор все равно переезжает на апелисин, а не абрикос все это странно |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 2 Всего: 61 |
1) Alex - умный, попробуй как он советует...
2) Если правильно пнял, то нуна следующее:
Вообще это всё походит на уроки SQL. В разделе "базу данных" есть замечательный учебник. Советую его почитать на досуге, если хочешь реально овлательно навыками создания баз даннух и работы с ними через язык SQL-запросов! |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Veniamin |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
Добого времени суток! Подскажите пожалуйста. Пишу программу работы с БД в Acess, связь через ADO. Записи главной таблицы разнесены по вкладкам TabSheet, на каждой вкладке сгрупппированы по параметрам. Необходимо реализовать поиск следующим образом: с помощью RadioButton-ов выбирается параметр поиска, или же можно CheckBox-ами. Есть Edit, в который вводится слово для поиска. Как реализовать, чтоб в DBGrid-е курсор ставился не только на первую найденную запись, а можно было по нажатию кнопки, к примеру, переходить к следующей записи и т.д. удовлетворяющей параметру поиска. Или же выбирается параметр поиска (столбец таблицы), затем в Edit-е пишется слово для поиска, и выводятся все найденные слова. Locate выводит лишь одну запись:
С Table.Filtered у меня не получилось, при вводе целого слова в DBGrid-е все поля исчезают
Или можно это реализовать как-то с помощью SQL-запроса? Т.е. пользователь вводит слово для поиска в Edit, указывает галочкой или несколькими нужный параметр, это передаётся в SQL-запрос заготовку, затем в DBGrid-е отображается результаты поиска записей удовлетворяющих параметрам? |
||||
|
|||||
| Данкинг |
|
||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Кидаешь AdoQuery, в который запросом выводишь нужную инфу (т.е. все записи, в которых встречается FindEdit.Text). Его можно привязать к DBGrid'у. Только лучше взять так:
-------------------- There's nothing left but silent epitaphs. |
||||
|
|||||
| Veniamin |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 44 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
Т.е. для каждого столбца таблицы будет свой ADOQuery? А если к примеру не RadioButton-ами указывать параметры поиска, а CheckBox-ами, то запросов будет больше? Можно ли как-то уменьшить число запросов? Или всё делается одним запросом?
p.s. Всё разобрался сам. Нужен всего один запрос, просто для каждого RadioButton-а в процедуре нажатия кнопки запрос переписывается заново, а результат вывожу в другой форме, не затрагивая основной DBGrid. Например:
Это сообщение отредактировал(а) Veniamin - 13.5.2008, 16:58 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |