|
Grid тянет текущую область данных на себя. Как пресечь?
|
|||
---|---|---|---|
#18+
При запуске обновления неких таблиц, выбираемых по текущей позиции ActiveCell в Grid, процедуры обновления ставят эти таблицы в текущую область данных. Процедуры обновления поверх формы с Grid'ом выставляют свои модальные окна диалога для запроса дополнительных данных. Иногда это проходит без осложнений, иногда Grid подставляет в текущую область свой RecordSource и обновление выбранной таблицы сбивается. Вот это "иногда" сильно заинтриговывает. Почему такая нерегулярность? Чтобы объехать эти "иногда" знаю только три приёма. 1) Переписать процедуры обновления, чтобы они обходились без текущей области данных. Слишком хлопотно. 2) Перед запуском процедуры обновления выбранной таблицы отключить источник: Grid.RecordSource = '' и дать GridForm.LockScreen = .T., а по завершении процедуры обновления восстанавить как было. Тогда придётся в окнах диалога Movable = .F., чтобы их перемещение не мазало замороженную форму. 3) Можно ещё объявить GridForm.DataSession = 2. Но тогда придётся открывать одни и те же таблицы в двух Session для этой формы и для процедур обновления. Да ещё и на беду процедуры обновления запускаются из объекта, встроенного в форму. Переделывать уже не с руки. Все варианты неудобны. Как же всё-таки добиться, чтобы Grid работала всегда одинаково и не тянула текущую область данных на себя? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2014, 21:48 |
|
Grid тянет текущую область данных на себя. Как пресечь?
|
|||
---|---|---|---|
#18+
Эврика! А что если использовать Grid.Enabled = .F.. Надо будет попробовать. Только как проверить устойчивость поведения, если будут наблюдаться благоприятные результаты? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2014, 23:30 |
|
Grid тянет текущую область данных на себя. Как пресечь?
|
|||
---|---|---|---|
#18+
Rostislav D. Kudryashov, ещё одна Эврика. Похоже, Grid.Enabled = .F. не срабатывает, т.к. вставив в процедуру обновления код ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2014, 23:57 |
|
Grid тянет текущую область данных на себя. Как пресечь?
|
|||
---|---|---|---|
#18+
Rostislav D. Kudryashov, ещё одна Эврика. Похоже, Grid.Enabled = .F. не срабатывает, т.к. вставив в процедуру обновления код SELECT OtherTable SET STEP ON видим, что в активной области ALIAS() == Grid.RecordSource. Но если переопределить обработчик события PROCEDURE Grid.When RETURN NOT THIS.Enabled то после STEP ON оказывается, что ALIAS() == OtherTable. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2014, 00:02 |
|
Grid тянет текущую область данных на себя. Как пресечь?
|
|||
---|---|---|---|
#18+
Rostislav D. Kudryashov, конечно, обработчик Grid.When должен RETURN THIS.Enabled Но всё равно непонятно, когда на самом деле, без SET STEP ON случается, что Grid забирает себе текущую область данных. Не будет ли необходимой страховкой на ВСЕ случаи после Grid.Enabled = .F. давать ещё RAISEEVENT (Grid, 'Valid') ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2014, 00:40 |
|
Grid тянет текущую область данных на себя. Как пресечь?
|
|||
---|---|---|---|
#18+
Чтобы такие вопросы не возникали: 1. Всегда указывай таблицу, поле которой используешь Код: sql 1.
2. Явно указывай таблицу с которой собираешься работать (in ...) например Код: sql 1.
3. Когда невозможно указать, переключайся в нужную рабочую область Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.09.2014, 17:18 |
|
|
start [/forum/topic.php?fid=41&msg=38759673&tid=1582534]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 149ms |
0 / 0 |