Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.04.2009, 19:32
serpico serpico вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 20
Репутация: 10
По умолчанию Неточный поиск без учета регистра!

Здравствуйте! Помогите пожалуйста с проблемой. Как Мне сделать поиск приблизительный поиск т.е. по не полному названию или содержания слова в середине текста И без учета регистра. При этом что бы можно было выбрать по какому полю искать. (НЕ НА SQL!!!)
ну примерно так выглядить будет:

Ответить с цитированием
  #2  
Старый 21.04.2009, 19:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ты точнее механизм поиска опиши.
Т.е. шаблоны.

Сравнение без учета регистра тебе помогут функции AnsiCompareText, AnsiUpper и AnsiLower.
Ответить с цитированием
  #3  
Старый 21.04.2009, 19:48
serpico serpico вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 20
Репутация: 10
По умолчанию

Ну кароче вот каким образом нужно:
1. Выбираю по какому полю искать в Combobox'e
2. Пишу слово для поиска в Edit'e по неполному названиею например: у меня есть название - ООО "Аптека на Клестовке", что бы я ввел - Аптека и он уже нашел
и так же без учета регистра т.е. "Аптека" и "апТЕка" это одно и то же.

Вот что мне нужно!
ах да и поиск по событию Edit1Change.
Ответить с цитированием
  #4  
Старый 21.04.2009, 20:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так и делай.

Сравнение:
Код:
If Pos(AnsiUpper(Edit1.Text),AnsiUpper(Query1.FieldByName(ComboBox1.Text).AsString)) > 0 Then ... // Нашли!!!
Ответить с цитированием
  #5  
Старый 21.04.2009, 20:08
serpico serpico вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 20
Репутация: 10
По умолчанию

Неа не работает че жалуется на:
AnsiUpper(Edit1.Text)
Ответить с цитированием
  #6  
Старый 21.04.2009, 20:14
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А как жалеется?
Я ж имена компонентов с потолка брал - у тебя могут быть другие.

Ну и, извини, функция точно называется AnsiUpperCase.
Ответить с цитированием
  #7  
Старый 21.04.2009, 20:19
roamer roamer вне форума
Активный
 
Регистрация: 15.04.2009
Сообщения: 369
Репутация: 93
По умолчанию

Цитата:
... сделать поиск приблизительный поиск т.е. по не полному названию или содержания слова в середине текста И без учета регистра. При этом что бы можно было выбрать по какому полю искать. (НЕ НА SQL!!!)

--- Трудно придумать что-то более гибкое и мощное, чем регулярные выражения.
Здесь :

http://regexpstudio.com/RU/TRegExpr/Help/About.html

можно скачать Freeware Delphi-компонент (исходники), реализующий этот механизм.
Неплохая штука ...
Ответить с цитированием
  #8  
Старый 21.04.2009, 20:37
serpico serpico вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 20
Репутация: 10
По умолчанию

Цитата:
Код:
If Pos(AnsiUpper(Edit1.Text),AnsiUpper(Query1.FieldByName(ComboBox1.Text).AsString)) > 0 Then ... // Нашли!!!
Не работает!
Ответить с цитированием
  #9  
Старый 21.04.2009, 20:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Я ж тебе написал, что функция немного подругому называется. Змени AnsiUpper на AnsiUpperCase. В обоих местах. Ну и цикл сверху по записям не забудь
Ответить с цитированием
  #10  
Старый 21.04.2009, 20:58
serpico serpico вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 20
Репутация: 10
По умолчанию

да я всё сделал не работает все равно.

У меня до этого было вот так почти работало но не то:
Код:
with Table1 do
  begin
    EditKey;
    FieldByName(ComboBox1.Text).AsString := Edit1.Text;
    GotoNearest;
  end;
Ответить с цитированием
  #11  
Старый 21.04.2009, 21:06
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

D) Не, мне это нравится. Сначала идет категоричное (НЕ НА SQL!!!) а потом выдается кусок программы для поиска в БД. Вы как-то определитесь, что и где искать?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 21.04.2009, 21:12
serpico serpico вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 20
Репутация: 10
По умолчанию

Блин я че то видать так тогда не понимаю всё (((
Тогда так я использую компонент Table а не Query !!
Извинюсь если я тут голову морочу всем, но я просто до ужаса Базу Данных ненавижу!!

Ладно вообщем сделать поиск ну хоть как нибудь мне главное чтоб не на самом языке SQL т.е. SELECT FROM и остальная байда что бы не встречалась, я вот совсем не умею этим пользоваться, пожалуйста помогите как мне сделать поиск по тем критериям что я написал выше

Последний раз редактировалось serpico, 21.04.2009 в 21:29.
Ответить с цитированием
  #13  
Старый 21.04.2009, 21:38
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Базу вы нелюбите потому-что похоже нехватает базовых знаний. Но это мое мнение.
Видите-ли какая штука, если бы вам надо было искать по значению или хотябы по части значения в начале, то да ваш первоначальный вариант подошел бы, но раз вам надо по вхождению искать, то придется отказаться от индексов и искать тупым перебором. Сделать это конечно можно, но объясните зачем заниматься мазохизмом если эта задача прекрасно решается элементарным запросом через Like ?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 21.04.2009, 21:44
serpico serpico вне форума
Прохожий
 
Регистрация: 04.02.2009
Сообщения: 20
Репутация: 10
По умолчанию

а можно обычным поиском как нибудь через базу? без всяких примочек, я прочитал что можно через команду Locate такое возможно?
Ответить с цитированием
  #15  
Старый 21.04.2009, 21:45
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Теже яйца только в профиль. Локейт будет искать с начала текста.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter