![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обсудим "Как сделать Редактор "Условий отбора" [D7, dBase, FoxPro]
azamatufa © (2008-05-23 10:37:00)Привет, Мастера!
Вот не знаю как быть, с чего начать. Кажется для меня задача не из легких. Прошу помощи, совета.
Задача Учет-кадров.
И так, у работника имеется множество различных характеристик:
- пол (муж,жен)
- дата рождения (Date)
- образование(высш,серд,нач.),
- категория (рук-ель, рабочий, служ.),
- воинское звание (генерал,полк-ник, майор, лейт....)
и так далее...
Так вот, надо сделать "Редактор "Условий отбора".
Например:
"Возраст" "больше" 30 И "Возраст" "меньше или равно" 50
И ("Звание" "равно" "Майор" ИЛИ"Звание" "равно" "лейтенант" )
Может кто сталкивался с подобными делами?
Какова структура базы данных?
Prohodil Mimo (2008-05-27 13:49:00) [1]Gadenysh (27.05.08 8:59) [39]
так уж и все? или только по тем данным, которые есть с таблице?
в моём варианте отбор абсолютно по любому параметру, независимо, отображён он с таблице или нет.
azamatufa © (24.05.08 6:56) [38]
врят-ли быстро разберёшься, я сам до этого доходил не один месяц. Но выглядит примерно так:
К примеру есть таблицы (приведу с русскими названиями, так что не пинаться)
Сотрудники (с_ид, с_имя, с_фам, проф_ид)
Профессии (проф_ид, проф_назв)
таблица с описанием структуры выглядет так:
стр_ид, п_стр_ид (указывает к кому принадлежит данная ветвь, для дерева), стр_таблица, стр_поле, стр_тип_поля, стр_название_для_юзера, стр_парам1
1, , Сотрудники, , 0 (корень), "Сотрудник", .
2, 1, Сотрудники, с_имя, 1 (строка), "Имя", .
3, 1, Сотрудники, с_фам, 1 (строка), "Фамилия", .
4, 1, Профессии, проф_назв, 2 (число), "Профессия", Сотрудники.проф_ид = Профессии.проф_ид.
ну а дальше программа, которая всё это обрабатывает.
Gadenysh (2008-05-27 08:59:00) [2]Уже сказали несколько раз - купи(укради) грид от DevExpress - там все твои хотелки уже реализованы, красиво и профессионально
azamatufa (2008-05-24 06:56:00) [3]
Prohodil Mimo ©
а покажи, пож-ста, какая структура + как выглядит таблица, содержащая эту структуру.
у тебя то что я ищу ))
Prohodil Mimo (2008-05-23 19:29:00) [4]а я забил в таблицу структуру всей базы, со всеми связями.
Пользователь выбирает нужный параметр из комбобокса выбирает = <> > < <= >= и т.д.
затем выбирает значение из классификатора, если это классификатор, если нет, то вруную вписывает что надо. Добавляет построчно все условия для отбора и жмёт на "выбрать".
http://ddsoftpro.lv/pictures/izvel_01.jpg
Разбираются даже те, кто в экселе с трудом.
Reindeer Moss Eater (2008-05-23 17:25:00) [5]при использовании грида в приложениях его контекстное меню администрируется системой безопастности.
Reindeer Moss Eater (2008-05-23 17:13:00) [6]в том числе и "drop database" ? ))
<Цитата>
ага. drop user sys cascade;
clickmaker (2008-05-23 17:11:00) [7]> для яйцеголовых есть опция "просмотр sql" с помощью которой
> можно вообще писать и выполнять целиком свой запрос
в том числе и "drop database" ? ))
Reindeer Moss Eater (2008-05-23 16:41:00) [8]Удалено модератором
MsGuns (2008-05-23 16:24:00) [9]Удалено модератором
Reindeer Moss Eater (2008-05-23 15:12:00) [10]Игорь Шевченко
а ишо у того грида есть волшебный метод:
function BatchProcess(ACallBack : TGridEhBetterCallBack; AUserData : Pointer; AWholeDataSet : boolean = False) : integer;
type
TGridEhBetterCallBack = function(AGrid : TDBGridEhBetter; AUserData : Pointer; var AMore : boolean) : boolean of object;
который избавил меня от циклов while not eof do begin next; end; в конечных формах.
просто но эффективно.
azamatufa (2008-05-23 15:09:00) [11]Reindeer Moss Eater
В том то и дело, что программа будет поставлятся в подведомственные организации без фильтров.
Каждая контора будет в самом начале набивать "свои условия" которые могут буть совершенно всякими... и после этого уже пойдет работа.
Если кто знает в кадрах - это называется "Перечень должностей и профессий" - он нужен для воинского учета и бронирования.
Так вот, каждая контора сугубо для себя вбивает (при помощи редактора) выписку из этого перечня.
Игорь Шевченко (2008-05-23 15:03:00) [12]Reindeer Moss Eater © (23.05.08 14:16) [23]
> опция "регистронезависимый поиск" и поиск по "неполному
> вхождению" (процент пририсовывается не только сзади но и
> спереди маски)
> последние по дефотлту в false.
Кстати, да, в одном из проектов у меня тоже был некий предварительный фильтр с несколькими криетриями и галкой "точно" напротив каждого критерия. Все, разумеется, на равенство, при галке "точно" ищем, что набили, при ее отсутствии, соответвенно LIKE и проценты спереди и сзади.
По моему опыту фильтром на равенство пользуются чаще всего, далее идет условие "от-до", а особые извращенцы уже задают "больше", "меньше" и т.п.
Reindeer Moss Eater (2008-05-23 14:38:00) [13]azamatufa
мне кажется, что ты в своем случае пошел не по тому пути.
что будет в результате:
программа, которая все может, но в которой нет предопределенных фильтров.
И тебе придется теткам объяснять, что ты не жираф, а это им на самом деле надо сначала попотеть и накорябать фильтры прежде чем все поедет-зашевелится.
Если же они у тебя все же будут, то почему бы их не встроить в сам интерфейс программы чтобы работать можно было сразу после инстала?
Sergey13 (2008-05-23 14:34:00) [14]> [25] azamatufa © (23.05.08 14:24)
> База на самом деле MS Access
Хрен редьки не слаще. Файловая БД - заходи в шару и бери.
Reindeer Moss Eater (2008-05-23 14:26:00) [15]а в чем проблемы с сохранением?
все условия есть, берем и сохраняем куда хошь.
azamatufa (2008-05-23 14:24:00) [16]
> Sergey13
База на самом деле MS Access (*.mdb), ADO.
azamatufa (2008-05-23 14:21:00) [17]2 Reindeer Moss Eater
Твой вариант я так понял удобен для оперативности.
Мне же надо, чтобы этот фильтр еще и сохранить!!!
Например:
Фильтр 1 - "Годные офицеры кому за 50 лет".
"Дата рождения" <= "23.05.1958" AND "Звание" >= "Лейтенант" AND "Годность" = "Годен А"
Мало того сохранить, так чтоб потом его можно было применить! ))
MsGuns - я тебя понял. Согласен, что для применения фильтра в запрос надо учитывать специфику структуры БД и SQL... НО! Ведь можно заранее (до начала программирования) определиться с:
1. Как будут храниться "Характеристики" человека?
2. Как будут харниться варианты значений "Характеристик"?
2. Как будут храниться условия ">" ">=" "<" ... (т.е. дать им коды что ли)
Придется повозиться...
Reindeer Moss Eater (2008-05-23 14:16:00) [18]у меня инверсия выделенного по горячей кстати тоже есть.
еще есть опция выделения "вот этой записи и вот той" (по PK).
опция "регистронезависимый поиск" и поиск по "неполному вхождению" (процент пририсовывается не только сзади но и спереди маски)
последние по дефотлту в false.
и все это сохраняется индивидульно для каждого экземпляра.
для яйцеголовых есть опция "просмотр sql" с помощью которой можно вообще писать и выполнять целиком свой запрос.
Игорь Шевченко (2008-05-23 14:07:00) [19]Учитесь фильтру у Excel-я или у DevExpress - все тетеньки работают, ни одна еще не пожаловалась.
Еще в Access-е был неплохой простой фильтр с двумя условиями "Фильтр по выделенному" и "Исключить выделенное" (ну и расширенный фильтр, разумеется, где можно кучу условий задавать, но он уже для яйцеголовых)
Reindeer Moss Eater (2008-05-23 13:14:00) [20]ну и на десерт главное отличие:
эргономика
что происходит у меня если надо вырать докменты "ООО "Рога и Копыта"":
встаем курсором поле с именем или другим идентификатором на любой документ "Рогов и копыт" и жмем серый плюс - раз.
нажиаем горячую для активации/деактивации фильтра - два.
готово.
что происходит у меня если надо вырать докменты клиентов, с именами начинающимися на "ООО":
встаем в колонку с именем и набираем "ООО" (курсор автоматом попал в заголовок) - раз.
жмем энтер или стрелку вниз - два.
готово.