alexisun |
Отправлено: 15.04.2005, 04:19 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Необходимо осуществить поиск в Таблице по слову, чтобы перемещалось на строку с этими словами:
TLocateOptions SearchOptions;
ADODataSet1->Locate
("name_razdel",Edit1->Text,SearchOptions loPartialKey loCaseInsensitive);
Данная функция ищет только полное совпадение либо если слово совпадает с началом строки.
Помогите кто может)))) |
|
olegenty |
Отправлено: 15.04.2005, 06:44 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
на ум приходит только полный перебор записей с поиском подстроки в строке...
|
|
AVC |
Отправлено: 15.04.2005, 08:18 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Обсуждалось уже не раз.
Собственный переносимый код закрывает эту проблему очень надолго. |
|
full_lamer |
Отправлено: 15.04.2005, 08:32 |
|
Машинист паровоза
Группа: Участник
Сообщений: 225
|
есть мнение: попытайтесь сделать это новым запросом. конечно получиться новая выборка, но на безрыбьи и рак рыба... с использованием оператора LIKE.
|
|
** alexisun |
Отправлено: 15.04.2005, 16:15 |
|
Не зарегистрирован
|
а вы знаете этот переносимый код или дайте ссылочку пожалуйста |
|
avc* |
Отправлено: 15.04.2005, 16:52 |
|
Не зарегистрирован
|
Собственный имеется ввиду написанный вами.
Свой код я уже приводил — поищите на этом форуме. Но он переносим ДЛЯ МЕНЯ.
Идея элементарна
for (Top; !Eof; Next) Сравнить значение поля с шаблоном
Остальное — антураж. |
|
Borr |
Отправлено: 20.04.2005, 07:18 |
|
Не зарегистрирован
|
Самый простой способ SQL запросом
"SELECT * FROM MAIN WHERE FIO LIKE \'%"+Edit1->Text+"%\'" здесь знак процента как раз то что вам нужно |
|
olegenty |
Отправлено: 20.04.2005, 08:15 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
2 Borr — внимательней прочти задание. не стоит задача отфильтровать данные с сервера, стоит задача спозиционировать запись на первую, удовлетворяющую маске.
кстати, это, по-моему, может делать DBGridEh :-) Ctrl + F — и будет вам счастье (только что вспомнил). но, приусловии, что НД — клиентский.
|
|
Borr |
Отправлено: 20.04.2005, 10:05 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 14
|
Объясняю свою идею. Грузить все записи в StringGrid
Сделать тот запрос который я показал
И сравнить строки запроса и StrinGrid'a по ключевому полю или Locate'om |
|
olegenty |
Отправлено: 20.04.2005, 11:27 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
я уже привёл рабочий пример, реализуемый всего-лишь настройкой свойств TDBGridEh. проверил — работает на ура и быстро.
|
|
xim |
Отправлено: 20.04.2005, 17:48 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
Где-то согласен с Borr (правда все зависит от платформы)
QUOTE | Самый простой способ SQL запросом
"SELECT * FROM MAIN WHERE FIO LIKE \'%"+Edit1->Text+"%\'" здесь знак процента как раз то что вам нужно |
Для MSSQL:
CODE |
"SELECT TOP 1 :pk_fld1,:pk_fld2 ..."
"FROM MAIN"
"WHERE FIO LIKE \'%"+Edit1->Text+"%\'"
|
Для Oracle:
CODE |
"SELECT :pk_fld1,:pk_fld2 ..."
"FROM MAIN"
"WHERE FIO LIKE \'%"+Edit1->Text+"%\'"
"AND ROWNUM=1"
"ORDER BY FIO;"
|
Далее Locate по out-параметрам pk_fld1, pk_fld2 (нужное значение PK или какого-нибудь уникального индекса).
Или описать процедуру получение значения Primary Key на сервере (SP, UDF)
|
|