Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск по базе. [D6, dBase, FoxPro]


Страницы:   1 2

widom ©   (2003-04-07 07:21:00) 

Нужно сделать поиск по базе данных, когда значение поля частично совпадает со строкой.
Например строка RAV. Он должен вывести поля со значением Drav и Ravik.
SQL запросы не предлагать.


Brenton   (2003-04-08 12:53:00) [1]

А можно пример на OnFilterRecord


Mike Kouzmine   (2003-04-08 12:40:00) [2]

OnFilterRecord - все, что угодно (для г-на Соловьева - в данном контексте) :)


Silver_   (2003-04-08 12:38:00) [3]

Ребята а у ТTable есть Опции фильтрации
правда когда я работал с ТTable и пробовал что-то вроде этого (Опций фильтрации)не пошло


> Соловьев © (08.04.03 12:27)
> OnFilterRecord - - уже б давно все работало...


интересно если ТTable не поддерживает LIKE
OnFilterRecord пройдет (сам не знаю OnFilterRecord не использовал не нужен был до сих пор)


Соловьев   (2003-04-08 12:27:00) [4]

OnFilterRecord - - уже б давно все работало...


Mike Kouzmine   (2003-04-08 12:20:00) [5]

Не похоже, а так и есть.


Brenton   (2003-04-08 12:11:00) [6]


> Silver_ (08.04.03 12:00)

Похоже Table не поддерживает Like


Silver_   (2003-04-08 12:00:00) [7]

1. посмотри Дебагом чему равен FilterString после присвоения !...!
2. попробуй напрямую в Object Inspector ввести это !...!

а ещё попробуй в Object Inspector ввести это
ORG LIKE "*слово*"

А возможно ТTable не поддерживает LIKE

и не забудь про
if SearchWord <> "" then

такое ORG LIKE "**"НЕ ПРОЙДЕТ

т.е. у тебя должно быть что-то вроде

if SearchWord <> "" then
begin
FilterString:="ORG LIKE "#39"*"+SearchWord+"*"#39;
Table1.Filter:=FilterString;
end;


Brenton   (2003-04-08 11:35:00) [8]


> Silver_ (08.04.03 11:21)

Незнаю, как у тебя все это работает. У меня код такой:

FilterString:="ORG LIKE "#39"*"+SearchWord+"*"#39;
Table1.Filter:=FilterString;

Выдает ошибку Project raised exception class EDBEngingError with message "Operation not applicable"



Silver_   (2003-04-08 11:21:00) [9]

писал сразу тута видимо настроить над-было
вот кусок из моей проге

if FilteredByEdit.Text <> "" then
MyADODataSet.Filter:="Name LIKE "#39" *"+ DoubleQuotedString (FilteredByEdit.Text,"""")+" *"#39;


где

function DoubleQuotedString(const S: string; Quote: Char): string;
var i: Integer;
begin
Result:="";
for i:=1 to Length(s) do
if S[i]=Quote then
Result:=Result+S[i]+S[i]
else Result:=Result+S[i];
end;


для дублирования аппострофов если они встречаются в самом тексте
типа "Can"t" превратится в "Can""t"

уберешь первую * фильтрует по началу стринга, оставишь найдет и в середине

А ошивка вылетала изза того что не проверял (пустоту не нада искать :) )
if FilteredByEdit.Text <> "" then


примечание #39 = "


Dim!S   (2003-04-08 10:08:00) [10]

А как конкрентно TTable.Filter указать LIKE?


Vopros   (2003-04-08 09:49:00) [11]

>Silver_ (07.04.03 16:42)
Что то это у меня не работает как часы.


Соловьев   (2003-04-08 09:33:00) [12]


> только он позволяет отобрать все записи, удовлетворяющие
> условию, о которых сказал widom

неужели? А Фильтр?????


Dim!S   (2003-04-08 08:17:00) [13]

В принципе это тот же путь (перебор всех записей), только если ты внимательно просмотрел указанную мной функцию, то должен был увидеть, что в ней можно применять wildcard symbols (* и ?), т.е. делать более гибкую выборку...


Brenton   (2003-04-08 08:09:00) [14]


> Dim!S (08.04.03 07:11)

Лучше я буду пользоваться стандартной функцией AnsiPos, она проверяет есть ли подстрока substr в строке, и возвращает позицию в кот начинается совпадение, если подстрока в строке не содержится, то возвращает 0.


Dim!S   (2003-04-08 07:11:00) [15]

тогда см. мой способ :)

только он позволяет отобрать все записи, удовлетворяющие условию, о которых сказал widom


Brenton   (2003-04-08 06:49:00) [16]


> Dim!S (08.04.03 06:23)


> А у тебя используется TTable или TQuery?

TTable


Dim!S   (2003-04-08 06:23:00) [17]

Это не двойные кавычки, а апострофы ("" - два апострофа)

А у тебя используется TTable или TQuery?



Brenton   (2003-04-08 05:36:00) [18]


> Silver_ (07.04.03 11:01)
> используй
>
> DataSet.Filter:="<<MyField>> LIKE "rav*"";
> DataSet.Filtered:=True;

Попробовал - не идет. Выдает ошибку Invalid filter expression character: и тут что-то похожее на двойные кавычки, причем не одни, там плохо видно:((
В чем может быть проблема??


Silver_   (2003-04-07 16:53:00) [19]


> Соловьев © (07.04.03 16:44)

совершенно верно, тока о сложных условиях ни слова в вопросе :)


Соловьев   (2003-04-07 16:44:00) [20]

только в Filter тебе записать работу со строками очень проблемно будет , если сложные условия.... А в OnFilterRecord все легко...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо