Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск подстроки в поле таблицы, Delphi - FB1.5 
V
    Опции темы
TheCetus
Дата 6.5.2006, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



Delphi 7 - IBX - FB1.5
для выбора данных используется компонент TIBDataSet.

Поиск выполняется позиционированием курсора на строку где в выбранном столбце встречается искомая подстрока

т.е. чтобы при поиске 'text' курсор позиционировался на строки
'astext'
'astextgh'
'textgh'
'text'

Использовал ds.locate но этот метод ищет только строки вида 'text%'
мне же надо чтобы поиск шел по маске '%text%'
как решить вопрос?
 
PM MAIL   Вверх
SPrograMMer
Дата 6.5.2006, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: 1
Всего: 6



ыыыыыыы......
Мысль первая:
Сотворить SQL запрос вида:
Код

Select ID From YourTable Where TextField Like '%text%'
вернуть ID, а после заюзать твой locate, но для поля ID, а не непосредственно текстового поля, и сикать то, что вернул сей запрос....

Мысль номер два - ручной поиск:
что вроде этого
Код

With IBDataSet Do begin
 First;
 While Not EOF Do begin
  If Pos('text',FieldByName('TextField').AsString)>0 Then // нашли!!!
   Break; // вон из цикла
  Next
 End
End
 


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
TheCetus
Дата 10.5.2006, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



опыт показал, чтоиспользование IBDataSet.Eof, IBDataSet.Next 'скроллит' данные в гриде и это выглядит не очень красиво
вопрос решил следующим образом 
данные в грид форму выбираю с order by Id asc;
использую отдельный поиск запросом select id from mytable where id>:id order by Id asc
(использование условия where позволяет выполнять 'FindNext') и уже в гридформе позиционирую на искомую запись 
PM MAIL   Вверх
Петрович
Дата 10.5.2006, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



А еще, у любого наседника tDataSet имеется методы EnableControls и DisableControls. Они позволяют временно выключить реакцию на изменение состояния набора данных, например на скролирование.
Так что делается например так:
Код

with IBDataSet do begin
  EnableControls;  
  try
    First;
    while  Pos('text',FieldByName('TextField').AsString) > 0  do
      Next;
  finally
    DisableControls;
  end;
end;

 


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
TheCetus
Дата 11.5.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 9.3.2006

Репутация: нет
Всего: 2



Петрович!

Добавлено @ 11:46 
Петрович!
где же ты был раньше? smile 
PM MAIL   Вверх
Dynamic
Дата 12.5.2006, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 2
Всего: 15



Цитата(TheCetus @  11.5.2006,  11:43 Найти цитируемый пост)
где же ты был раньше? 

я думаю, читал доки  smile 
 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
Петрович
Дата 14.5.2006, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 6
Всего: 55



Цитата(Dynamic @  12.5.2006,  13:14 Найти цитируемый пост)
я думаю, читал доки  

Неее. Доки я уже лет десять как не читаю - скучно.  smile  


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Dynamic
Дата 15.5.2006, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 372
Регистрация: 5.7.2004
Где: Салехард

Репутация: 2
Всего: 15



Цитата(Петрович @  14.5.2006,  20:28 Найти цитируемый пост)
Доки я уже лет десять как не читаю - скучно


думаю - тебе впору их уже самому писАть ;)
 


--------------------
Было бы о чем молчать, а уж что сказать – всегда найдется...
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.