Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Несохраняемое свойство |
Автор: Akella 18.9.2006, 12:50 |
Есть компонента TDataBase. У неё есть свойство connected типа boolean. В процессе проектирования это свойство устанавливается в True. Так вот, если перед компиляцией не установить connected в false, то на другом компьютере программа не запускется по следующей причине: - во время создания компоненты TDataBase она "ищет" сам файл базы данных, вот во время проектирования база "лежала" по одному пути, на другом компьютере (где будет работать прога) база может лежать по другому пути, а по сему TDataBase не находит сам файл БД, а Connecned ведь установлено в True - в итоге вываливается исключение и программа закрывается. Короче, нужно гарантированно установить свойство Connected в False или перед компиляцией или при создании самой компоненты TpFIBDatabase. В TDataModule.OnCreate не получиться, т.к. OnCreate формы наступает после создания всех компонент. Испольую TpFIBDatabase. |
Автор: sergejzr 18.9.2006, 12:54 |
Автор: Snowy 18.9.2006, 13:08 |
Перевожу: В дизайнтайме нужно, чтобы свойство Connected было установлено в true. А при компиляции в exe эта пропертя должна быть в False. То есть Connected в дизайнтайм - true, в рантайм - false. Проблема в том, что состояние сохраняется в dfm файл и срабатывает автоматом после выполнения конструктора. Соответственно выход - сделать так, чтобы пропертя в dfm не сохранялась. Пробовали сабклассить, устанавливая у проперти stored False - не получилось. Может у кого есть ещё идеи? |
Автор: Akella 18.9.2006, 13:13 | ||
я имел ввиду, чито свойство не долно сохранять никакое другой значание, кроме False Добавлено @ 13:15 я уже залез в исходники, нарушив золотое правило и установил значение в конструкторе, ща буду тестировать
Добавлено @ 13:18 есть ещё вариант использовать псевдонимы, так сказать, т.е. есть свойство Alias типа String; А у FireBird есть файл алиасов. На одном компе у Alias`a с именем "Kvx" один путь, на другом - другой путь, но это запасной вариант уже, так сказать, т.к. некоторые TDatabase не имею алиасов, как у ADO, например. |
Автор: Snowy 18.9.2006, 13:22 |
Akella, так не получится. Проперти подгружаются из dfm уже после отработки конструктора. |
Автор: Elfebet 18.9.2006, 13:37 | ||||
а почему бы не создать модуль и конектится с базой при помощи сессии, типа такого
ну если нет Алиаса, можно просто коннектится написав типа такого
и поставить чтоб при загрузке проекта загружался первым модуль и потом все остальные юниты. и все дела.... ![]() |
Автор: sergejzr 18.9.2006, 13:53 |
А если её сразу в конструкторе уже прописывать как disconnected и затем коннектить в зависимости от режима (который опросить можно несколькими вам известными способами)? |
Автор: Akella 18.9.2006, 13:58 |
Придумал вот такое: На форму кидаю ещё одну компоненту TpFIBDatabase. Вот у него всегда будет Connected в False, потому что во время дизайна нет надобности устанавливать Connected в True. Добавлено @ 14:02 вот сначал пытаюсь подключиться этой компонентой к базе, а потом уже и основной |
Автор: Akella 18.9.2006, 14:20 | ||
прога уже запускается, уже легче, только при закрытии программы стало вываливаться исключение "Invalid Pointer Operation", будем рыть... |
Автор: Akella 18.9.2006, 14:46 | ||||||
всё вроде нормально работает. вот это пока не пробовал
Добавлено @ 14:53 в constructor TFIBDatabase.Create(AOwner: TComponent); нет connected Добавлено @ 14:57 такое нашёл
|
Автор: Akella 18.9.2006, 15:02 | ||
помоему я тут изобретаю велосипед
Добавлено @ 15:10 всё, тема закрыта, вычитал в документации.... ![]() |