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

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

Обращение к БД при активизации формы [D7]


Страницы:   1 2

Alex7 ©   (2005-12-30 08:38:00) 

Уважаемые мастера! С наступающим Вас!
Помогите, пожалуйста, решить следующую проблему:

В обработчике активизации формы мне нужно
обратиться к одному из полей БД.
Например:
procedure TForm1.FormActivate(Sender: TObject);
begin
r := Table1.Field[0].Text
end;
Компилятор выдает "Access violation".
Т.е, наверное обращаться во время активизации
нельзя. А от значени "r" зависит "Visible" соответствующего
компонента этой формы. Где выход?. Спасибо.


sniknik   (2005-12-31 15:07:00) [1]

> Ну приведенный код - упрощенный вариант.
вот это самая главная ошибка спрашивающих, приводить и обсуждать не то что есть на самом деле.

подумай, если ты приводиш упрощение то должен перенести туда и ошибку, верно? ичаче смысла нет. а если ты ее туда можеш перенести значит знаеш в чем она, так? значит в этом случае в вопросе смысла нет. искать то что и так знаеш где...
упрощение действительно только в одном случае, когда на реальном примере моделируют глюк, и убирают все лишнее а глюк все еще проявляется. только на это почемуто никто время не тратит... проще вопрос в форум кинуть, неутруждаясь. (и + исковеркать исходные данные, чтобы отвечающие свои телепаторы тренировали, не расслаблялись...)

> Но я еще раз проверю (переставлю обратно),
чудо, это то, что непонимаеш как сделано и обьяснить с материальной точки зрения не получается.

можеш не проверять, перенеся создание датамодуля до глайной формы ты перенес и создание лежащего в нем обьекта до того как использовал. (т.е. это частный случай [21])


Alex7   (2005-12-31 14:00:00) [2]

> sniknik
Ну приведенный код - упрощенный вариант.
(Я не думал, что ДатаМодуль влияет).
На самом деле Table1 лежит в ДМ.
А мысль о влиянии мне подал ASoft.
Но я еще раз проверю (переставлю обратно),
т.к. в чудеса не верю.


sniknik   (2005-12-31 13:18:00) [3]

> Тем не менее факт налицо.
не верь своим фактам, верь Anatoly Podgoretsky - любой обьект должен создаваться до его использования. неважно как и где но до, и еще доуничтожения (т.е. в промежутке между созданием и уничтожением).
а твой факт просто частный случай, создание одного/них обьекта/тов ты вынес раньше создания других. и все.  

> Все заработало. только после перестановки.
чудо. обыкновенное чудо.
т.к. (судя по коду в [0]) Table1 никакого отношения к датамодулю не имеет а "лежит" просто на форме (TForm1).


Alex7   (2005-12-31 12:44:00) [4]

> Anatoly Podgoretsky
Тем не менее факт налицо. Все заработало
только после перестановки.


Anatoly Podgoretsky   (2005-12-31 11:51:00) [5]

Неверно, это объект должен создавать до его использования.


Alex7   (2005-12-31 04:03:00) [6]

Спешу поделиться. Все оказывается очень просто.
В главном модуле поменял местами
 Application.CreateForm(TDataModul, DataModul);
                   и
 Application.CreateForm(TForm1, Form1);
Т.е. модуль данных должен создаваться раньше
формы.


Johnmen   (2005-12-31 01:03:00) [7]

>ASoft   (30.12.05 17:45) [17]
>Если база создается в DataModul'e, то ессно, создание ее происходит после
>create главной формы

Уважаемый, откуда вы откопали такую естественность?
Просто интересно....


Alex7   (2005-12-30 18:25:00) [8]

> Если база создается в DataModul'e

Похоже, что тут и зарыта собака.
База действительно в DataModul'e.
Проверю.
И на этом закрыли вопрос.
Думаю, что беседа была полезной.
Во всяком случае для меня.
Еще раз большое спасибо и с
наступающим Новым годом.


ASoft   (2005-12-30 17:45:00) [9]

Если база создается в DataModul'e, то ессно, создание ее происходит после create главной формы (если не вызван обработчик создания в create гл. формы, конечно). В таком случае можно обратиться к таблице в onShow гл. формы. имхо


Digitman   (2005-12-30 16:59:00) [10]


> как это совместить с тем, что
> все происходит в  "AfterOpen"?


без детального исследования исх.текста - никак.


Плохиш   (2005-12-30 16:53:00) [11]


> Alex7   (30.12.05 16:35) [13]

Можно спросить? Что такое это Table1? Где описано и где создаётся?


Digitman   (2005-12-30 16:42:00) [12]


> Alex7   (30.12.05 16:35) [13]


чеши репу.

факт отсутствия объекта, на который сей момент должна ссылаться переменная Table1, дебагер подтвердил.


Alex7   (2005-12-30 16:35:00) [13]

> поймай брейкпойнт

Поймал. "Inaccessible value". Т.е. предположение
подтвердилось. Но как это совместить с тем, что
все происходит в  "AfterOpen"?


Digitman   (2005-12-30 14:03:00) [14]


> Плохиш ©   (30.12.05 13:43) [11]


Скорей всего именно так дело и обстоит


Плохиш   (2005-12-30 13:43:00) [15]

О, ветка для телепаторов, только свой из ремонта обратно получил :-) Опробуем :-)
Включаем, ага, говорит Table1 или не создана, или не открыта.


Digitman   (2005-12-30 13:34:00) [16]

поймай брейкпойнт на этой строчке.
наведи курсор мыши на идент-р "Table1" - какой хинт выдишь ?


Alex7   (2005-12-30 13:31:00) [17]

А что отладчик ?   В пошаговом режиме дошел до оператора обращения к полю и при его выполнении  " AV процесс остановлен по адресу 00404
в модуле ...........    Читай из адреса 00000198 "  А что с этой информацией делать моей квалификации не хватает. Даже не знаю, где можно прочитать
что-то на эту тему.


Digitman   (2005-12-30 11:51:00) [18]


> Результат тот же-
> -"Access violation"


и что говорит по этому поводу отладчик ?


Alex7   (2005-12-30 11:43:00) [19]

Спасибо за участие, но мне кажется, что
решение где-то в стороне.
"After Open"  и "OnCreate" проверил. Результат тот же-
-"Access violation".
Значение поля меняется, но эта проблема
меня решена. Я обращаюсь к таблице и
все работает. А вот при открытии формы-нет.
Может быть можно  програмно создать
какое-нибудь событие уже после открытия формы
и в обработчик вставить обращение к таблице?
Вот как это сделать не соображу.


evvcom   (2005-12-30 09:23:00) [20]


> Johnmen ©   (30.12.05 09:19) [4]

:-)
Верное замечание. А ежели он все-таки двигаться будет, то и [2] не лучше, а лучше DataSet.AfterScroll


Страницы:   1 2

Наверх

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