Быстрый поиск в каталоге

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Быстрый поиск в каталоге

Сообщение evchic »

Добрый день!
Может кто подскажит как сделать быстый поиск используя * в качестве любой буквы например чтоб найти Угол нужно ввести "*ол*" и в браузере появится все слова имеющие эти 2 буквы

В Акцесе можно было сделать вот так

Код: Выделить всё

SELECT * FROM KatMC WHERE ((KatMC.Name Like '*ол*'));
Но в галактеке не такого понятия ка Like
Может есть идеи по данному вопросу?
coolibin
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 29 мар 2005, 17:49

Сообщение coolibin »

что-нибудь типа

where instr(katmc.name, 'ол') > 0
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

Не так не работает...
Seybukan
Местный житель
Сообщения: 1357
Зарегистрирован: 29 мар 2005, 17:49
Откуда: СПб, ЭП-Аудит
Контактная информация:

Сообщение Seybukan »

function MatchesMask(Str, Mask : string): Boolean;
MatchesMask(KatMc.name,'?ол?')=true
поЧитатель
Посетитель
Сообщения: 44
Зарегистрирован: 27 янв 2006, 14:21

Сообщение поЧитатель »

SELECT * FROM KatMC WHERE
instr('ол', katmc.name) > 1;
Seybukan
Местный житель
Сообщения: 1357
Зарегистрирован: 29 мар 2005, 17:49
Откуда: СПб, ЭП-Аудит
Контактная информация:

Сообщение Seybukan »

SELECT * FROM KatMC WHERE
instr('ол', katmc.name) > 1;
В таком случае будет не тока "Угол", но еще и "футбол" и "ганбол". :)
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

Смысл всего в том что у меня на панели есть Текстовое поле и браузер...
И при наборе текста в текстовом поле должен происходить запрос в выдавать в браузере все слова где встречается набранный текст!!! :o
поЧитатель
Посетитель
Сообщения: 44
Зарегистрирован: 27 янв 2006, 14:21

Сообщение поЧитатель »

Пробуй через Condition

interface ConditionMc 'Выберите МЦ' escclose,cyan;
show at (,2,,20);
Create View
var
temps : string;
KatMc.Name
from
KatMC (ReadOnly)
Condition FiltrName as
instr(temps, katmc.name) > 0;
;
panel tbKatMc;
table KatMc;
Screen scSetup ( ,, sci1Esc);
show at (,,,3);
Fields
temps: noprotect;
Buttons
cmOk, Default;
cmAll;
<<

Строка поиска : .@@@@@@@@@@@@@@@@@

<.Искать.> <.Все МЦ.>

>>
end; // Screen
HandleEvent
cmOk:
{
if(temps>''){
PushCondition(tcFiltrName);
RereadRecord;
}else{
Message('Введите строку поиска!');
}
}
cmAll:
{
PopCondition(tcFiltrName);
RereadRecord;
}
end; //Event
end; //Screen

Browse brNamBank;
show at (,4,,);
fields
KatMC.Name 'Наименование матценности', hcOkatalM1ComplMC,sci1378Esc) : [31], PickButton;
end; //Browse

end; //Panel
end.


// Оговорюсь сразу: блок не проверял, времени сейчас нет, но что-то

в этом духе, хотя постановка задачи выглядит удручающе
8)
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

И так всем спасибо... собрав все вместе получился следующий код:

Код: Выделить всё

interface Etest1 'Выберите МЦ' escclose,cyan;
show at (,2,,20);
Create View
var
temps : string;
as Select KatMc.Name from
KatMC (ReadOnly)
Condition FiltrName as
MatchesMask(KatMc.name,temps)=true;
;
panel tbKatMc;
table KatMc;
Screen scSetup;
show at (,,,3);
Fields
temps: noprotect;
Buttons
cmOk, Default;
cmAll;
<<

Строка поиска : .@@@@@@@@@@@@@@@@@

<.Искать.> <.Все МЦ.>

>>
end; // Screen
HandleEvent
cmOk:{
StartNewVisual(vtRotateVisual,0,'Подготовка данных ...',1);
{
if(temps>''){
PushCondition(tcFiltrName);
RereadRecord;
}else{
Message('Введите строку поиска!');
}
}
StopVisual('',0);
}
cmAll:
{
PopCondition(tcFiltrName);
RereadRecord;
}
end; //Event
end; //Screen

Browse brNamBank;
show at (,4,,);
fields
KatMC.Name 'Наименование матценности': [31], PickButton;
end; //Browse
end.
Благодарю за помощь!!!
Следующая функция работает в Gal 7.12 точно

Код: Выделить всё

function MatchesMask(Str, Mask : string): Boolean;
MatchesMask(KatMc.name,'?ол?')=true
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Сравнивать результат выполнения булевской функции с булевской же константой вульгарно. Зачем сравнивать true с true, чтобы получить true или false с true, чтобы получить false? Функция сама сообщает вам "правду" или "ложь". Короче говоря, просто пишите

Код: Выделить всё

сondition FiltrName MatchesMask(KatMc.name,temps)
Кроме того, никому не рекомендую использовать PushCondition - с ее помощью вы накладываете ограничение на всю логическую таблицу. Будь у вас в ней побольше узлов - то-то вы бы попотели, пытаясь понять, куда исчезают все данные после наложения условия. Думаю, многие уже сталкивались с загадочным поведением кода при использовании PushCondition.
В общем, рекомендую всегда использовать только PushConditionForLeave.
Виталий
f1-help
Сообщения: 0
Зарегистрирован: 24 авг 2006, 13:55

Сообщение f1-help »

ВСЕ ХОРОШО ИСХОДНЫЙ ТЕКСТ КОМПИЛЯЕТСЯ, ЗАПУСКАЕТСЯ, ДА И ПО ЛОГИГЕ ТОЖЕ ВСЕ ВРОДЕ ПОНЯТНО! НО НЕ РАБОТАЕТ!!! ВНОСИШЬ В СТРОКУ ДАННЫЕ (ВЛОБ ПРОСТО КОПИРУЕШЬ ИЗ ТАБЛИЦЫ СТРОКУ НАИМЕНОВАНИЕ И ВСТАВЛЯЕШЬ), НО ПОСЛЕ ПОДГОТОВКИ ДАННЫХ ТАБЛ-А ПУСТАЯ. :???:
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

Screw писал(а):Сравнивать результат выполнения булевской функции с булевской же константой вульгарно. Зачем сравнивать true с true, чтобы получить true или false с true, чтобы получить false? Функция сама сообщает вам "правду" или "ложь". Короче говоря, просто пишите

Код: Выделить всё

сondition FiltrName MatchesMask(KatMc.name,temps)
Кроме того, никому не рекомендую использовать PushCondition - с ее помощью вы накладываете ограничение на всю логическую таблицу. Будь у вас в ней побольше узлов - то-то вы бы попотели, пытаясь понять, куда исчезают все данные после наложения условия. Думаю, многие уже сталкивались с загадочным поведением кода при использовании PushCondition.
В общем, рекомендую всегда использовать только PushConditionForLeave.
Благодарю за совет!!! :cool:
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Screw
Про кондишны :) Попадал на баундсах на тоже самое :) Пока опытным путём "догнал" в чём дело - много воды утекло :)
Теперь пользуюсь AddBounds SubBounds
Зато наглядно, здесь положил баундс, надо ещё положил, надо убрал :)
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Screw
Про кондишны Попадал на баундсах на тоже самое Пока опытным путём "догнал" в чём дело - много воды утекло
Теперь пользуюсь AddBounds SubBounds
Зато наглядно, здесь положил баундс, надо ещё положил, надо убрал
ток нужно следить за индексами и порядком добавления баундсов )))
в принципе noindex здесь поможет )))
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Слушайте Мэва, он не обманет.
Виталий
Ответить