![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск по базе. [D6, dBase, FoxPro]
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 все легко...