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

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

использовать IBQuery в разных юнитах [D7, XP]


Fynjy ©   (2008-08-21 11:02:00) 

Здраствуите! такое дело: есть две формы, в форме1 есть IBQuery и DBGrid,  как сделать так чтобы компанент IBQuery можно было бы использовать и в форме2 (коротко осути: В форме2 задаются параметры поиска, а в форме1 выводятся результаты).


Fynjy   (2008-08-21 13:09:00) [1]

Сергей М., спасибо!


Сергей М.   (2008-08-21 12:07:00) [2]

Ну тогда, например, объяви и реализуй конструирующий метод Ф2, в которым предусмотрена передача доп.параметром ссылки на объект, с Ф2 будет работать после конструирования.

TForm2 = class(TForm)
..
private
..
 FIBQuery: TIBQuery;
..
public
..
 constructor Create(AOwner: TComponent; AQuery: TIBQuery);
..
end;

..

constructor TForm2.Create(AOwner: TComponent; AQuery: TIBQuery);
begin
 Create(AOwner);
 FIBQuery := AQuery;
end;

..

Form2 := TForm2.Create(Application, IBQuery);


Fynjy   (2008-08-21 11:51:00) [3]

Ф1 это MainFraim  на ней все завязано, так что если закрыть Ф1, то ничего не будет-это выход из программы


Сергей М.   (2008-08-21 11:46:00) [4]

А если Ф1 будет разрушена узером, что должно произойти с Ф2 ?

Ведь она пользовала живой объект с живой Ф1, а теперь ни Ф1 ни объекта на ней не существует ..


Fynjy   (2008-08-21 11:43:00) [5]

Вот что касается модальности, нужна форма (форма 2) немодальная и чтобы при клике на форме 1, форма 2 не пропадала.


Сергей М.   (2008-08-21 11:34:00) [6]


> что делать - то?


Для начала однозначно определиться со временем жизни/показа Формы2 и с ее модальностью ее показа ..


MsGuns   (2008-08-21 11:34:00) [7]

Внимательно прочитать и ПОНЯТЬ что написано в [5]


Fynjy   (2008-08-21 11:32:00) [8]

Я сейчас работаю не со своим кодом, мне придется разбираться еще дольше если я перемещю эти компаненты в дата модуль. Друзья, вы наверное не учли что я начинающий самоучка, поэтому мне не доконца понятно, что делать - то?


Сергей М.   (2008-08-21 11:28:00) [9]


> MsGuns ©   (21.08.08 11:26) [5]
>
> Бывают, однако, исключения


Бесспорно.


MsGuns   (2008-08-21 11:26:00) [10]

>Сергей М. ©   (21.08.08 11:11) [3]
>Вообще-то дейтамодули как раз для таких потребностей и предназначены.

Бывают, однако, исключения. Например, в MDI может быть энное кол-во экземпляров одного и того же класса формы, а на форме свой собственный набор компонент доступа. В этом случае датамодуль не решает проблемы.

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


Fynjy   (2008-08-21 11:14:00) [11]

Действительно изврат, но спасибо за идею, буду пробовать!


Сергей М.   (2008-08-21 11:11:00) [12]

Вообще-то дейтамодули как раз для таких потребностей и предназначены.


> по другому никак?


Форма2 видит Форму1 ?

Тогда объяви в Форме1 публичное свойство типа TIBQuery и в его методе-геттере возвращай указатель на объект IBQuery.

Но вообще-то это изврат)


Fynjy   (2008-08-21 11:08:00) [13]

А по другому никак?


Amoeba   (2008-08-21 11:05:00) [14]

Размести IBQuery и DataSource на DataModule.


Наверх

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