|
|
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
На форме: комбобокс и Грид. Грид питается из ЛВ, получаемое из таблицы А, которая фильтруется через выбор в Комбобоксе. Комбобокс роется в справочнике Б. Для закрытия формы стоит: Код: plaintext 1. Если Комбик не трогал - все ОК. Если полистал - выскакивает ошибка "нет доступа к таблице Б". Исправляется все добавлением строчки Код: plaintext Любопытно: Почему такой идивидуальный подход? Разве Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2006, 22:16 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
ВладимирМ уже не раз пояснял по поводу порядка инициализации и удалении объектов на форме в VFP. Поищите...не хочется все это рассматривать еще раз. Для вашего случае проще всего между командами Thisform.Release() и Close Tables All добавивить "отвязку" ComboBox от данных : Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 09:15 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
men dea..... Исправляется все добавлением строчки Код: plaintext Любопытно: Почему такой идивидуальный подход? Разве Код: plaintext Да, в общем случае Thisform.Release() не уничтожает все ссылки на обьекты. В конкретном случае, надо смотреть Ваш код (контрольный пример в студию), скорее всего ошибка возникает из-за блокировки записи в таблице, так же надо увидеть set('exclu') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 09:15 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
Да, собственно, читал я статьи Владимира М. Но, вроде, не мой случай. И файл вам "в студию" посылаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2006, 13:17 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
A ne zabil zakrit "lvOTDEL"? SELECT lvOTDEL USE *Close Tables All Thisform.Release() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2006, 16:01 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
Да, я раньше пробовал lvOTEL закрыть через USE IN lvOTDEL, но все равно требуется индивидуальное уничтожение комбобокса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.12.2006, 18:40 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
Лично у меня вложенная форма закрывается без проблем командой ThisForm.Release() Ничего дополнительно нигде писать не надо. VFP9SP1 Общий принцип закрытия формы - форма не может быть закрыта, если: -) Осталась не удаленная ссылка на саму форму или на COM-объект, находящийся внутри формы (например, ссылка на node объекта TreeView) -) Не завершено событие или метод самой формы Для определения проблемы, вставь точку останова в событие Unload формы. В отладчике в этот момент сама форма все еще должна существовать, но не должно быть ни одного объекта внутри формы. Из замеченных ошибок: Событие QueryUnload() Не надо дублировать здесь код выхода. Получается, две разные процедуры для выхода из формы. Необходимо править код в двух разных местах. Надо просто перенаправить вызов на тот метод, который и занимается организацией закрытия формы Код: plaintext 1. 2. 3. В событии закрытия формы команда CLOSE ALL - явно лишняя. Закрытие источников данных никак не может повлиять на факт уничтожения объектов формы. Событие Form.Init() Давать здесь команду ThisForm.Refresh() - бессмысленно. Эта команда обновляет "картинку". Изображение на форме. Но все дело в том, что в событии Form.Init собственно картинки еще нет. Форма еще не отображена. Кстати, именно этот метод и может приводить к глюкам. Точнее, его вызов из Init() формы. Возможно, Release() зависает из-за незавершенности либо собственно метода Init(), либо Refresh() вызванного из Init() формы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2006, 14:49 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
Итак, у меня VFP9+SP1. Я заменил код в Form.QueryUnload() на рекомендуемый вами, г-н Максимов: NODEFAULT Thisfrom.Command1.Click() Убрал из Form.Init() обновление формы: Thisform.Refresh() Я даже для чистоты из Thisform.Grid1.AfterColRowChange() удалил Thisform.Refresh(), хотя без него никуда... :)) CLOSE TABLES не убираю по понятным причинам: исчезнет основа этого вопроса, ибо таблица filial естественно найдется. Хотя, собственно, эта строка и вызывает ошибку. Поставил точку останова в Thisform.Unload(). Но ошибка все равно проявляется, хотя, там объектов и нет. После Thisform.Release() остается только пара public-переменных, от которых можно, конечно, избавиться, если вместо них использовать свойства формы. *Экспериментировал. Ничего не меняется) А еще остается combogrid=.NULL. типа "О" И все... Но ошибка выскакивает. И почему? Ну, жутко интересно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2006, 23:52 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
Чтобы не париться по этому поводу больше никогда вставь в release Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 11:35 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
men deaCLOSE TABLES не убираю по понятным причинам: исчезнет основа этого вопроса, ибо таблица filial естественно найдется. Хотя, собственно, эта строка и вызывает ошибку. .... Но ошибка выскакивает. И почему? Вы сами-то читаете, то что пишите? Сами же нашли причину ошибки, но исправлять не желаете по понятным только Вам причинам. И что Вы хотите услышать в ответ? Либо так и продолжайте получать ошибку, либо меняйте логику работы. Повторяю, у меня ошибки нет. Либо напишите пошаговую инструкцию что и в какой последовательности надо нажимать в Вашей форме чтобы получить ошибку, либо ищите, что же у Вас есть такого, что не попало в тестовую форму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 11:40 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
valetyka спасибо. Но на мой вопрос почему это происходит, вы не отвечаете. У меня тоже самое, но не в цикле. Я знаю, как избежать ошибку, но не понимаю почему она вообще в том месте возникает. Владимиру М. Я руководствовался логикой: вышел из формы - закрыл все связанные с ней таблицы. Где еще, как не в Unload и т.п. писать это? Разве толко форму запускать из подпрограммку и после ее стирания давать строчку на закрытие таблиц? Последовательность действий, ведущих к ошибке: 1. Запускаете Форму, 2. В комбобоксе выбираете другой филиал после этого изменятся сведения в Гриде. 3. нажимаете на кнопку Выход Должна появиться ошибка: нет доступа к filial.filial и не свформируется Грид. Будет белая зона. У меня так. Да, и у знакомого ставил - тоже самое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 14:03 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
Теперь понятно. Так вот, если ничто не помогает ПРОЧТИТЕ НАКОНЕЦ ИНСТРУКЦИЮ! В данном случае, прочтите HELP по ошибке 1152. Вот ссылка на ее перевод на русском Невозможно обратиться к выбранной таблице (Ошибка 1152) В данном случае логика закрытия формы должна быть следующая Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 14:34 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
Если у тебя появится fatal error c0000005 при закрытии формы, мне тоже пытаться разобраться с причиной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 16:02 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
И чего это вы такие "Р-р-р-р-р...?" :)) За ссылку спасибо. Правда, я ее читал еще раньше и там про манипуляции с формой ничего не сказано. Там отдельно есть комбобокс, у которого отбирают таблицу. Тут даже аскет бы возмутился: "Не только лисе, но и ежику понятно, что таблица закрылась и найти значение негде!" Вопрос состоял-то в другом: "Почему уже удаленная форма со всякими объектами (ведь с точкой останова в Debug не видно никаких объектов. Я так понимаю, что они почили в бозе? ) требует эти закрывшиеся таблицы? " Тогда переформулирую вопрос в просьбу. Будьте любезны, дайте ссылочку на то, где описаны особенности удаления объектов на форме при ее закрытии. Не нашел. :( Порядок создания я видел. Полагаю, что централизованное удаление формы в порядке "LIFO". Но тогда в Дебагере должен быть виден либо Грид, либо Комбобокс. Но их же там нет, а запрос на закрытую табличку имеется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 17:31 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
Кстати, в той же ссылке прямо сказано: чтобы не было ошибки, "цитирую": Установите свойство RowSource в пустое значение (" "). -ИЛИ- Закройте форму, содержащую элементы управления ComboBox или ListBox . и ничего ДОПОЛНИТЕЛЬНО, стоит "ИЛИ". А разве Thisform.Release() ее не закрывает ее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 17:42 |
|
||
|
Thisform.Release() уничтожает все объекты на форме?
|
|||
|---|---|---|---|
|
#18+
men deaКстати, в той же ссылке прямо сказано: чтобы не было ошибки, "цитирую": Установите свойство RowSource в пустое значение (" "). -ИЛИ- Закройте форму, содержащую элементы управления ComboBox или ListBox . и ничего ДОПОЛНИТЕЛЬНО, стоит "ИЛИ". А разве Thisform.Release() ее не закрывает ее? Только здесь неявно подразумевается фраза "ПЕРЕД закрытием таблиц". Помнишь, с чего там начинается текст? "Если Вы хотите закрыть таблицу ..." А у тебя это все происходит "ПОСЛЕ". Т.е. ты СНАЧАЛА закрываешь таблицы, а ПОТОМ пытаешся что-то сделать с ComboBox. Точнее, в данном случае, с раскрывающимся списком. Combo.Deactivate() происходит после Form.Release(). Т.е. Form.Release() работает как некий "диспетчер" запускающий некую последовательность событий по саморазрушению формы. Кроме того, в данном случае речь идет не об уничтожении собственно объектов формы, а об уничтожении объектов внутри объектов. Т.е. очистке некоего внутреннего списка ComboBox.List. Как этот массив наполняется и как поддерживается его актуальность, насколько я знаю, нигде прямо не говорится. Вот с освобождением этого массива, видимо, и возникают проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2006, 19:01 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34203671&tid=1590145]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 345ms |

| 0 / 0 |
