18.07.2019, 19:18 [+3 UTC]
в нашей команде: 3 747 чел. | участники онлайн: 4 (рекорд: 21)

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

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

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
18.07.2019, 12:26

Последний вопрос:
18.07.2019, 11:30
Всего: 149936

Последний ответ:
18.07.2019, 12:04
Всего: 258705

Последняя рассылка:
17.07.2019, 22:15

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

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

Наша кнопка:

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

Отзывы о нас:
18.04.2012, 17:39 »
Arman Muratuly
В условии написано что стена. [вопрос № 185854, ответ № 270575]
14.08.2017, 21:27 »
solest
Спасибо Вам большое за ответ! Буду пробовать... [вопрос № 191278, ответ № 275194]
04.02.2011, 11:06 »
Григорий Апельсинов
"БОМБА"! [вопрос № 182095, ответ № 265713]

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

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

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

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

Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 197
puporev
Статус: Профессионал
Рейтинг: 120
Асмик Гаряка
Статус: Советник
Рейтинг: 0

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

Консультация онлайн # 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.16092 сек.

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