17.10.2005, 12:29 | #21 |
Участник
|
Нужно отработать алгоритм в таблице или есть форма, построенная на этой таблице и в ней нужно отображать записи по фильтру? Если форма, можно переписать триггеры OnFind OnNext. При этом критерий отбора может быть насколько угодно сложным.
|
|
19.10.2005, 15:32 | #22 |
Участник
|
2 romeo:
А если нужно иметь возможность править записи, а не только смотреть? Ещё кучу тригеров переписать, я правильно понимаю? |
|
19.10.2005, 16:03 | #23 |
Участник
|
Цитата:
Сообщение от e-statik
2 romeo:
А если нужно иметь возможность править записи, а не только смотреть? Ещё кучу тригеров переписать, я правильно понимаю? |
|
19.10.2005, 17:01 | #24 |
Участник
|
Цитата:
Сообщение от romeo
Я говорю про форму, построенную на нормальной, не временной таблице.
|
|
19.10.2005, 17:35 | #25 |
Участник
|
И ещё задача. Примитивная структура:
Таблица1 содержит записи некоторой сущности, есть ключевое поле... Таблица1 связана с Таблицей2 как "один ко многим". Таблица2 содержит список пользователей для каждой записи из Таблицы1. Пусть пользователи берутся из Таблицы3, где каждый пользователь уникален, впрочем эта таблица уже не важна в рамках задачи... А теперь простой вопрос: как получить записи Таблицы1, к которым я - Пользователь_X имею отношение в Таблице2? |
|
19.10.2005, 17:50 | #26 |
Участник
|
Цитата:
Сообщение от e-statik
Цитата:
Сообщение от romeo
Я говорю про форму, построенную на нормальной, не временной таблице.
<div class='CALtop'>C/AL</div><div class='CAL'> OnFind Exit(FormFind(Which)); OnNext exit(FormNext(Steps)); FormFind(Which : Text[1024]) : Boolean lrec.COPY(Rec); IF NOT lrec.FIND(Which) THEN EXIT(FALSE); IF Which='+' THEN li:=-1 ELSE li:=1; WHILE NOT CheckFindRec(lrec) DO BEGIN lii:=lrec.NEXT(li); IF lii=0 THEN EXIT(FALSE); END; Rec:=lrec; EXIT(TRUE); FormNext(Steps : Integer) : Integer lrec.COPY(Rec); lrec:=Rec; li:=0; CASE TRUE OF Steps>0:li:=1; Steps<0:li:=-1; END; lRealStep:=0; REPEAT lii:=lrec.NEXT(li); IF lii=0 THEN EXIT(lRealStep); IF CheckFindRec(lrec) THEN BEGIN lRealStep:=lRealStep+li; Rec:=lrec; END; UNTIL lRealStep=Steps; EXIT(lRealStep); </div> функция CheckFindRec возвращает TRUE для записей удовлетворяющих условию Недостаток такого подхода - если интервал между записями удовлетворяющими условию достаточно большой, то будет ощутимое замедление вывода записей |
|
19.10.2005, 17:52 | #27 |
Участник
|
Можно в OnOpenForm() получить строку фильтра - набор ID сущностей для пользователя (фильтр на код пользователя в таблице 2 и получение кодов сущностей через палку из нее же) и зашить этот фильтр в какую-нить фильтргруппу при открытии. Если сущностей не особо много ..
|
|
19.10.2005, 18:40 | #28 |
Участник
|
Цитата:
Сообщение от romeo
Если сущностей не особо много ..
|
|
16.11.2005, 10:05 | #29 |
Участник
|
Вал работы, только добрался до проверки этого кода.
Сходу добиться работоспособности кода у меня не получилось. lrec - это локальная temp record? У меня всегда отображается пустой список, и не важно что возвращает CheckFindRec - TRUE или FALSE |
|
16.11.2005, 10:29 | #30 |
Участник
|
Цитата:
Сообщение от e-statik
Вал работы, только добрался до проверки этого кода.
Сходу добиться работоспособности кода у меня не получилось. lrec - это локальная temp record? У меня всегда отображается пустой список, и не важно что возвращает CheckFindRec - TRUE или FALSE |
|
16.11.2005, 11:01 | #31 |
Участник
|
2 zub
Она временная или нет?? И REC - это не локал. record, а глобал... |
|
16.11.2005, 15:31 | #32 |
Участник
|
Цитата:
Сообщение от e-statik
|
|
16.11.2005, 16:35 | #33 |
Участник
|
Да с REC-ом то всё понятно. Просто когда я увидел конструкции вроде
lrec.COPY(Rec); lrec:=Rec; решил, что такое стоит выполнять только с временной таблицей, думая что в противном случае это может внести изменения в реальные данные. Видимо нужно ещё почитать документацию Спасибо! Код фунициклирует. Вопрос такой: а есть ли при этом возможность данные править и чтобы изменения сохранялись? |
|
16.11.2005, 16:43 | #34 |
Участник
|
Цитата:
Сообщение от e-statik
решил, что такое стоит выполнять только с временной таблицей, думая что в противном случае это может внести изменения в реальные данные.
|
|
16.11.2005, 17:18 | #35 |
Участник
|
Цитата:
Сообщение от e-statik
Да с REC-ом то всё понятно. Просто когда я увидел конструкции вроде
lrec.COPY(Rec); lrec:=Rec; решил, что такое стоит выполнять только с временной таблицей, думая что в противном случае это может внести изменения в реальные данные. Видимо нужно ещё почитать документацию Спасибо! Код фунициклирует. Вопрос такой: а есть ли при этом возможность данные править и чтобы изменения сохранялись? Я думаю можно, скорее всего главное чтобы изменеия не коснулись значений полей по которым наложен фильтр, хотя не факт. Надо пробовать Если будете эксперементировать, буду благодарен если сообщите результаты |
|
16.11.2005, 17:29 | #36 |
Участник
|
Цитата:
Сообщение от zub
Цитата:
Сообщение от e-statik
Да с REC-ом то всё понятно. Просто когда я увидел конструкции вроде
lrec.COPY(Rec); lrec:=Rec; решил, что такое стоит выполнять только с временной таблицей, думая что в противном случае это может внести изменения в реальные данные. Видимо нужно ещё почитать документацию Спасибо! Код фунициклирует. Вопрос такой: а есть ли при этом возможность данные править и чтобы изменения сохранялись? Я думаю можно, скорее всего главное чтобы изменеия не коснулись значений полей по которым наложен фильтр, хотя не факт. Надо пробовать Если будете эксперементировать, буду благодарен если сообщите результаты |
|
16.11.2005, 17:35 | #37 |
Участник
|
Да, я поэкспериментирую с этим, правда незнаю как скоро это получится сделать.
Ещё раз спасибо! |
|
16.11.2005, 17:38 | #38 |
Участник
|
Скорее всего если убрать COPY(REC) то все будет зависить от признака выдавать запись или нет при анализе lrec
Тогда будет всеравно какой фильтр наложен на форму, но не вижу этому применения, хотя гепотетически это возможно. |
|
09.12.2005, 11:28 | #39 |
Участник
|
|
|
09.12.2005, 18:47 | #40 |
Участник
|
Не, ну наверное можно будет как-нить извратиться .. Держать записи, показанные при открытии во временном буфере и отображать ИЛИ удовлетворяющие условию ИЛИ имеющиеся в буфере .. Всегда можно что-то сделать.
|
|