IBconnection1.connected

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
pi1
новенький
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск
Контактная информация:

IBconnection1.connected

Сообщение pi1 »

Веду проект со многими формами. При редактировании полей компонент на одной из форм на главной форме в компоненте IBconnection1.connected ставится true автоматом и остается там в true пока "ручками" не переведу в false в свойствах компоненты или не изменю главную форму. То есть при компиляции эта компонента остается соединенной с датасетом, что не правильно. Где поставить птичку, чтобы при пересборке проекта IBconnection1.connected ставилось в false автоматически? Версия Lazarus 1.0.6
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Честно говоря, не понял проблемы. Ну вставьте в oncreate вашей формы IBconnection1.connected := false ...
Аватара пользователя
pi1
новенький
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск
Контактная информация:

Сообщение pi1 »

Ага, для приложения с одной формой у меня так и делается. А тут у меня десяток форм и на каждой по компоненте SQLQuery, которая ссылается на главную форму. И не проходит ни connected := false , ни Close ни CloseDatasets c ProccessMessages. Как запускаю на другой машине (если забыл в false до компиляции поставить) то имею ошибку "DoInternalConnect:I/O error......".
sts
энтузиаст
Сообщения: 548
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Сообщение sts »

pi1 писал(а): То есть при компиляции эта компонента остается соединенной с датасетом, что не правильно. Где поставить птичку, чтобы при пересборке проекта IBconnection1.connected ставилось в false автоматически?

никак, а точнее это зависит от используемого набора компонент.
более современные компоненты (например на делфе) учитывают что активация дб подключения произошло в дизайнтайме и НЕ напрямую через свойство Connected.
кароче подшаманить надо, property Connected stored IsStoredConnected (или как там) написать надо и патч отправить

Добавлено спустя 8 минут 38 секунд:
посмотрел

Код: Выделить всё

TDatabase = class(TCustomConnection)
...
published
    property Connected: Boolean read FConnected write SetConnected;

вот тут надо умный stored написать
Аватара пользователя
pi1
новенький
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск
Контактная информация:

Сообщение pi1 »

Пока что только контрольку себе поставил. Чтоб не прозевать. В Form1.Create вставил if form1.IBconnection1.Connected=true then showmessage('Ahtung!!');
На большее ума не хватает Ж(
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Сообщение pupsik »

А тут у меня десяток форм и на каждой по компоненте SQLQuery, которая ссылается на главную форму.
и зачем только datamodule придумали :?
Пересмотрите логику приложения.
Аватара пользователя
pi1
новенький
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск
Контактная информация:

Сообщение pi1 »

Уже пересмотрел, я с датамодуля начинал. Когда количество форм и SQLQuery перевалило за 50, то отказался (я там поскромничал, про 10 написал). Конечно правильней было б не отказываться и одни и те же SQLQuery использовать для разных целей, переназначая и пересоздавая набор полей на лету. Но это как то не сложилось. Мне понятней работать "в лоб" чем по ссылкам. Легче осмысливать логику работы приложения. Особенно когда писать приходится прогу для пользователей женского пола. Возможно в этом году займусь оптимизацией проекта, а пока жизнь диктует свои задачи.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Не в состоянии понять, какое отношение SQLQuery имеет к IBconnection - у вас, что IBconnection1 на каждый SQLQuery свой???
Аватара пользователя
pi1
новенький
Сообщения: 59
Зарегистрирован: 19.04.2012 18:11:24
Откуда: г.Зеленокумск
Контактная информация:

Сообщение pi1 »

Есть одна компонента IBconnection и SQLQuery на каждой форме свой (свои). Если б я изначально работал не через компоненты доступа к БД, а использовал бы выборку через SQLQuery в TStrings с последующим выводом в строковые компоненты, то это было б правильно. Точно также и с вводом и изменениями в БД. Сначала работа со строковыми компонентами и потом через SQLExecute, то тоже было б правильнее. Но проект начинался с нескольких формочек ( а в свойствах компонент БД так много удобств и вкусностей), что я и увяз в этом всем. Когда в дизайнтайм рядом с табличкой на форме свой SQLQuery, со своим набором полей, то легче осмысливать работу подсистем проекта. Но к теме это имеет отношение только потому, что если и IBconnection и SQLQuery находятся в одном модуле, то при компиляции IBconnection отваливается от дизайнтайм-БД , а у меня нет. Если я откомпилировал с открытым датасетом, то после, в runtime, эта компонента ищет эту самую базу и отключить дизайтайм-БД можно только после того, как IBconnection ее найдет. Ессно на другом ПК прога просто не загружается. Так вот я искал, где настроить в IDE или закрытие коннекта или предупреждение, что коннект не закрыт при компиляции. Не нашел такого и просто вставил в своем проекте такое предупреждение.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

О боже! А что мешает вставлять в oncreate каждой формы проверку на коннекшн??? Одна строчка, пусть хоть у вас там 100500 форм...
Ответить