Текущий архив: 2008.09.28;
Скачать: CL | DM;
Вниз
использовать IBQuery в разных юнитах Найти похожие ветки
← →
Fynjy (2008-08-21 11:02) [0]Здраствуите! такое дело: есть две формы, в форме1 есть IBQuery и DBGrid, как сделать так чтобы компанент IBQuery можно было бы использовать и в форме2 (коротко осути: В форме2 задаются параметры поиска, а в форме1 выводятся результаты).
← →
Amoeba © (2008-08-21 11:05) [1]Размести IBQuery и DataSource на DataModule.
← →
Fynjy (2008-08-21 11:08) [2]А по другому никак?
← →
Сергей М. © (2008-08-21 11:11) [3]Вообще-то дейтамодули как раз для таких потребностей и предназначены.
> по другому никак?
Форма2 видит Форму1 ?
Тогда объяви в Форме1 публичное свойство типа TIBQuery и в его методе-геттере возвращай указатель на объект IBQuery.
Но вообще-то это изврат)
← →
Fynjy (2008-08-21 11:14) [4]Действительно изврат, но спасибо за идею, буду пробовать!
← →
MsGuns © (2008-08-21 11:26) [5]>Сергей М. © (21.08.08 11:11) [3]
>Вообще-то дейтамодули как раз для таких потребностей и предназначены.
Бывают, однако, исключения. Например, в MDI может быть энное кол-во экземпляров одного и того же класса формы, а на форме свой собственный набор компонент доступа. В этом случае датамодуль не решает проблемы.
В целом же есть довольно простое правило, соблюдение которого позволяет сократить "непонятки" с "межмодульными" обращениями если не до нуля, то до минимума:
формы не должны обращаться друг к другу по явным ссылкам. Вместо этого используются сообщения либо внешние указатели (в главной форме или том же датамодуле) либо посредством процедур, в которых ссылки на объекты представлены параметрами.
← →
Сергей М. © (2008-08-21 11:28) [6]
> MsGuns © (21.08.08 11:26) [5]
>
> Бывают, однако, исключения
Бесспорно.
← →
Fynjy (2008-08-21 11:32) [7]Я сейчас работаю не со своим кодом, мне придется разбираться еще дольше если я перемещю эти компаненты в дата модуль. Друзья, вы наверное не учли что я начинающий самоучка, поэтому мне не доконца понятно, что делать - то?
← →
Сергей М. © (2008-08-21 11:34) [8]
> что делать - то?
Для начала однозначно определиться со временем жизни/показа Формы2 и с ее модальностью ее показа ..
← →
MsGuns © (2008-08-21 11:34) [9]Внимательно прочитать и ПОНЯТЬ что написано в [5]
← →
Fynjy (2008-08-21 11:43) [10]Вот что касается модальности, нужна форма (форма 2) немодальная и чтобы при клике на форме 1, форма 2 не пропадала.
← →
Сергей М. © (2008-08-21 11:46) [11]А если Ф1 будет разрушена узером, что должно произойти с Ф2 ?
Ведь она пользовала живой объект с живой Ф1, а теперь ни Ф1 ни объекта на ней не существует ..
← →
Fynjy (2008-08-21 11:51) [12]Ф1 это MainFraim на ней все завязано, так что если закрыть Ф1, то ничего не будет-это выход из программы
← →
Сергей М. © (2008-08-21 12:07) [13]Ну тогда, например, объяви и реализуй конструирующий метод Ф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 13:09) [14]Сергей М., спасибо!
Страницы: 1 вся ветка
Текущий архив: 2008.09.28;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.017 c