25.03.2019, 18:05 [+3 UTC]
в нашей команде: 3 487 чел. | участники онлайн: 9 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.73 (23.03.2019)
JS-v.1.33 | CSS-v.3.35

Общие новости:
09.03.2019, 10:08

Форум:
24.03.2019, 14:42

Последний вопрос:
25.03.2019, 17:22
Всего: 149085

Последний ответ:
25.03.2019, 17:50
Всего: 258030

Последняя рассылка:
25.03.2019, 15:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
24.01.2016, 21:35 »
Илья
Большое спасибо) Честно говоря, первый раз на вашем сайте и не ожидал бесплатной и очень качественной помощи) [вопрос № 188706, ответ № 273282]
25.09.2010, 20:16 »
kot31
Спасибо, мой ответ был таким же, но не так подробно и всё по полочкам... [вопрос № 180022, ответ № 263185]
09.01.2012, 13:32 »
lamed
Большое спасибо, Дмитрий Германович! С уважением. [вопрос № 185124, ответ № 269504]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 522
zdwork
Статус: 1-й класс
Рейтинг: 126
puporev
Статус: Профессионал
Рейтинг: 104

Перейти к консультации №:
 

Консультация онлайн # 142422
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Maximus777
Отправлена: 27.08.2008, 18:49
Поступило ответов: 2

Пипл! Можете показать на пальцах как реализовать следующий вопрос. Есть база db.mdb, в ней есть поля "Наименование", "Цена", "Размер" и т.д., как можно организовать поиск подстроки в поле "Наименование"? Вариант с Locate хорошо и быстро работает, но ищет только от начала слова, а мне надо чтоб фраза была найдена в любой позиции поля.

Состояние: Консультация закрыта

Ответ # 228022 от Кэр Лаэда

Здравствуйте, Maximus777!


вы правильно догадываетесь
Adoquery
datasource
и если в будущем будете использовать несколько соединений то еще и adoconnection
по поводу как соединить все эти компоненты

Первым делом нужно на форму бросить компонент ADOConnection1, в свойстве ConnectionString выбрать ваше соединение, для этого нажать Build выбрать поставщика Microsoft Jet 4.0 нажать далее потом выбрать ваш Access файл и проверить подключение, если все хорошо то жмете ОК (все строка подключения задана)

далее бросаете на форму
DataSource из DataAccess
DBgrid из DataControls
ADOQuery из ADO

и связываете их друг с другом

буду писать как код, но это на самом деле нужно будет просто выставить в свойствах компонентов

DBgrid1.DataSourse:=DataSourse1


DataSourse1.DataSet:=ADOQuery1

все настройка компонентов произведена далее к запросам


при нажатии на кнопку например "поиск" выполняется следующий код


with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from table where Наименование like ''%подстрока%''');
open;
end


и в принципе все

если будут вопросы в минифорум


Консультировал: Кэр Лаэда
Дата отправки: 27.08.2008, 19:17

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Ответ # 228058 от Шичко Игорь

Здравствуйте, Maximus777!
Поиск подстроки в базе данных осуществляется при помощи SQL типа:
SELECT Наименование FROM db.mdb WHERE Наименование LIKE '%строка%'
Описание LIKE:
'abc%' - Любые строки, которые начинаются с букв "abc".
'abc_' - Строки длиной строго 4 символа, причем первыми символами строки должны быть "abc".
'%z' - Любая последовательность символов, которая обязательно заканчивается символом "z".
'%Rostov%' - Любая последовательность символов, содержащая слово "Rostov" в любом месте строки.


Консультировал: Шичко Игорь
Дата отправки: 28.08.2008, 08:48

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 142422
Кэр Лаэда

# 1

= общий = | 27.08.2008, 18:56

а вариант с обычным селектом не подходит ?
select * from table where Наименование like '%подстрока%'

неизвестный

# 2

= общий = | 27.08.2008, 19:04

Наверное подходит. А можно поподробнее и с примером кода? Я в самом начале пути программерства на Дельфи. Такой запрос мне нужен динамически в программе. Т.е. ввод в Edit'е текста и затем поиск этого текста в поле "Наименование" по всей базе. Я пока только догадываюсь что на форме должен быть компонент ADOQuery, а вот как им пользоваться х/з.

неизвестный

# 3

= общий = | 27.08.2008, 20:17

Во блин! Строчку скопировал, но в комменте она не полностью. Вот весь запрос:
begin
Close;
SQL.Clear;
SQL.Add('select * from База where Наименование like '%NameClient.text%'');
open;
end

Кэр Лаэда

# 4

= общий = | 27.08.2008, 20:27

перед %NameClient.text%
2 кавычки после 3

неизвестный

# 5

= общий = | 27.08.2008, 21:21

Вот так:
SQL.Add('select * from База where Наименование like '''+NameClient.Text+'''');
и компилится и ошибок при работе нет. А как результат поиска лицезреть?
Я до этого делал так:
if not MainForm.BookName.Locate('Наименование', NameClient.text, [loPartialKey]) then ShowMessage(NameClient.text + ' не найден.')
Найденная строка подсвечивалась в гриде. Но поиск работал только от начала фразы. Как можно запрос так же привязать к гриду?

Кэр Лаэда

# 6

= общий = | 27.08.2008, 21:25

результат... ну если вы все правильно сделали то все что в запросе должно отображатся в гриде то есть это нечто в виде фильтра.... кстати а где символ % в запросе?

неизвестный

# 7

= общий = | 27.08.2008, 21:46

Да, вот это DataSourse1.DataSet:=ADOQuery1 упустил. Теперь вроде работает, но отфильтровывает всё, грид в итоге чистый. Вот вся конструкция:
procedure TEditRecForm.NameClientKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key=39 then
with MainForm.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from База where Наименование like ''%NameClient.Text%''');
open;
end
end;
Очищает грид напрочь.

неизвестный

# 8

= общий = | 27.08.2008, 22:16

В справке нашёл вариант, который меня бы устроил полностью. SQL.Add('select * from База where Наименование containing NameClient.text');
Но при выполнении запроса вылетает ошибка Ошибка синтаксиса (пропущен оператор) в выражении запроса 'Наименование containing NameClient.text' Что ему не хватает?

Кэр Лаэда

# 9

= общий = | 28.08.2008, 12:36

попробуйте вместо % в моем варианте написать #

неизвестный

# 10

= общий = | 28.08.2008, 12:53

Спасибо. Выяснил в чём дело. Срабатывает с %. НО! Если я прописываю прям в запросе текст. Типа like ''%Иван%''' . Находит и Иванова и Ивановича. Похоже что он не подставляет текст из Edit'а в запрос. И ещё оказывается такой запрос чувствителен к регистру букв. Это не есть гуд. Мне бы по всякому надо. А containing можно вообще как-то заюзать? Вроде в описании сказано что ему без разницы какие буквы искать, большие или маленькие.

Кэр Лаэда

# 11

= общий = | 28.08.2008, 13:26

ваш NameClient.Text это Edit тогда нужно писать так

SQL.Add('select * from База where Наименование like ''%'+NameClient.Text+'%''');

неизвестный

# 12

= общий = | 28.08.2008, 13:32

Иииииййяяххууууу!!! Работает!!! Да ещё и не смотря на регистр букв. Спасибо огромное за помощь.

Кэр Лаэда

# 13

= общий = | 28.08.2008, 13:38

Пожалуйста..

 

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

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.16211 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.73 от 23.03.2019
Версия JS: 1.33 | Версия CSS: 3.35