kv75
21:39 06-04-2005 Опять о своём
Сегодня на второй работе дописал основу изменённой программы для сайта - теперь она будет через MySQL работать. Опять мой любимый ZeosDBO...

Запускаю - выдаёт Access violation. Сколько раз надо наступать на одни и те же грабли?! Правда, когда я пишу с нуля, я уже эти грабли обхожу, а тут переделывал и не заметил. Грабли совершенно тривиальные, и все пишущие программы на Дельфи их наверняка знают. В общем виде это выглядит так: создаются главная форма и модуль данных с компонентами работы с БД. Разумеется, в модуле данных ссылаться на главную форму некрасиво. Поэтому некоторая инициализация элементов формы должна быть проведена именно в ней - обычно это делается в OnCreate. Но если эта инициализация использует данные из БД, то ничего не выйдет, так как в это время компоненты модуля данных ещё не созданы (и не инициализированы, кстати). Менять порядок создания форм в файле проекта как-то неэстетично. Поэтому естественное решение, которое я нашёл для себя - использовать для инициализации обработчик формы OnShow. При этом в OnCreate ставится флаг того, что форма только что создана, а после первого прохода OnShow этот флаг снимается, и больше инициализация выполняться не будет.

В общем, когда я сделал эту стандартную операцию, всё нормально запустилось. Завтра буду тестировать.