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

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

Обсудим "Как сделать Редактор "Условий отбора" [D7, dBase, FoxPro]


Страницы:   1 2

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]

ну и на десерт главное отличие:

эргономика

что происходит у меня если надо вырать докменты "ООО "Рога и Копыта"":
встаем курсором поле с именем или другим идентификатором на любой документ "Рогов и копыт" и жмем серый плюс - раз.
нажиаем горячую для активации/деактивации фильтра - два.
готово.

что происходит у меня если надо вырать докменты клиентов, с именами начинающимися на "ООО":

встаем в колонку с именем и набираем "ООО" (курсор автоматом попал в заголовок) - раз.
жмем энтер или стрелку вниз - два.
готово.


Страницы:   1 2

Наверх

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