Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.28;
Скачать: CL | DM;

Вниз

Как в классе динамически создать компонент?   Найти похожие ветки 

 
sD ©   (2008-08-14 11:53) [0]

Доброго времени суток уважаемы эксперты!
Хочу написать класс, который будет работать с б.д. Классу доступен компонент ADOConnection, в конструкторе динамически создается TADOQuery, и метод класса возвращает TDataSet. Возникает ошибка в процессе выполнения программы (не может создать объект TADOQuery). Как написать правильное создание? Спасибо.

Ttelephone=class(TObject)
   q:TADOQuery;

 public
    constructor Create;
    destructor Destroy;
    function  Index(-param-):TDataSet;
 end;

/----------------------------------------------------------------
constructor Ttelephone.Create;
begin
    q:= TADOQuery.Create(DM);//DM - DataModul <-Ошибка при выполнении
    q.Connection:= DM.ADOConnection1;
end;
//------------------------------------------------------------------------------
destructor Ttelephone.Destroy;
begin
 q.Destroy;
end;
//------------------------------------------------------------------------------
function  Ttelephone.Index(-param-):TDataSet;
begin
 q.SQL.Text:="---запрос---";
 q.active:=true;
 result:=q;
end;


 
Medbe}I{onok XML ©   (2008-08-14 11:57) [1]

q:= TADOQuery.Create(DM);//DM - DataModul <-Ошибка при выполнении

Кто такой Dm и кто его проинициализировал?


 
sD ©   (2008-08-14 12:01) [2]

Dm это DataModule он подключен с модулю, где описан класс. Как написать правильно?


 
Medbe}I{onok XML ©   (2008-08-14 12:07) [3]

Я вижу что это модуль.
Кто проинициализировал эту переменную или поле чтобы ты его начал использовать?


 
Medbe}I{onok XML ©   (2008-08-14 12:13) [4]

Или ты хочешь сказать, что в модуле этого чудесного компонента есть юзез модуля данных программы?


 
sD ©   (2008-08-14 12:31) [5]

нет.

> Я вижу что это модуль.Кто проинициализировал эту переменную
> или поле чтобы ты его начал использовать?

DataModule был создан при запуске программы.
Как проинициализировать в классе переменную, для создания компонента на нем???


 
Medbe}I{onok XML ©   (2008-08-14 12:33) [6]

оператором присвоения


 
Medbe}I{onok XML ©   (2008-08-14 12:35) [7]

нет.

Врешь?
Где в твоем классе объявление DM?
У тебя это глобальная переменная из датамодуля видимого благодаря включению модуля в юзес компонента.
Замечательный компонент, ничего не скажешь.


 
sD ©   (2008-08-14 12:38) [8]

Пример такого волшебного присваивания можно увидеть?


 
{RASkov} ©   (2008-08-14 12:41) [9]

> [5] sD ©   (14.08.08 12:31)
> DataModule был создан при запуске программы.


> constructor Ttelephone.Create;
> begin
>    q:= TADOQuery.Create(DM);//DM - DataModul <-Ошибка при выполнении
>    q.Connection:= DM.ADOConnection1;
> end;

Сделай так:
constructor Ttelephone.Create;
begin
 if not Assigned(DM) then
   Showmessage("DM не создан, Ошибка")
 else begin
   q:= TADOQuery.Create(DM);
   q.Connection:= DM.ADOConnection1;
 end;
end;


 
Medbe}I{onok XML ©   (2008-08-14 12:47) [10]

Пример такого волшебного присваивания можно увидеть?

Для начала поле в классе создай.
Пока у тебя присваивать нечему.


 
sD ©   (2008-08-14 12:51) [11]


> Врешь?Где в твоем классе объявление DM?У тебя это глобальная
> переменная из датамодуля видимого благодаря включению модуля
> в юзес компонента.Замечательный компонент, ничего не скажешь.
>

Да, вру))
Да глобальная переменная и в классе не объявлен.
Создам я переменную, как ее инициализировать? указателем на форму?


 
Medbe}I{onok XML ©   (2008-08-14 13:02) [12]

Недавно это был модуль данных. А сейчас уже форма?


 
sD ©   (2008-08-14 13:04) [13]

ДА, модуль данных,оговорка. Так вы подскажите?


 
Medbe}I{onok XML ©   (2008-08-14 13:09) [14]

Чо те подсказать-то?
Что есть такая вешь как параметры функций и оператор := ?


 
Medbe}I{onok XML ©   (2008-08-14 13:10) [15]

Ttelephone=class(TObject)
public
   constructor Create(AConn : TAdoConnection);
end;


 
sD ©   (2008-08-14 13:57) [16]

В каком виде будет передаваться в конструктор DataModule? (указатель, ссылка или вы предлагаете копировать объект?)


 
Medbe}I{onok XML ©   (2008-08-14 14:30) [17]

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


 
sD ©   (2008-08-14 15:02) [18]

Ты не ответил не на один вопрос, если сам не знаешь как реализовать нечего писать разную ерунду.


 
Medbe}I{onok XML ©   (2008-08-14 15:20) [19]

constructor Create(AConn : TAdoConnection);

А эту декларацию можно как-то умудриться неоднозначно трактовать с точки зрения "в каком виде передавать" ?

Есть параметр. Параметр строго типизирован.
Какие еще рассусоливания можно высосать из своего пальчика глядя на этот код?


 
sD ©   (2008-08-14 15:33) [20]

Да причем здесь constructor Create(AConn : TAdoConnection);
причем здесь AConn : TAdoConnection !!!!!!!!!!!!!!!!!!!!!!!


 
Medbe}I{onok XML ©   (2008-08-14 15:38) [21]

да не причем.
но это же у тебя код не работоспособный, а не у меня.


 
Medbe}I{onok XML ©   (2008-08-14 15:40) [22]

причем здесь AConn : TAdoConnection !!!!!!!!!!!!!!!!!!!!!!!

А как будет ADOTable соединяться с чем - либо без него?
Через свою строку коннекта?
Сколько датасетов, столько сессий к серверу будем открывать?


 
Medbe}I{onok XML ©   (2008-08-14 15:42) [23]

и накой хрен там сдался датамодуль там в конструкторе?
больше нет кандитатов на оунер для адотэйбла?
За оунера смог бы сойти сам экземпляр твоего замечательного класса


 
sD ©   (2008-08-14 16:02) [24]

Что не верно на твой взгляд?


Ttelephone=class(TObject)
   q:TADOQuery;
 public
    constructor Create(AConn : TAdoConnection);
    destructor Destroy;
    function  Index(sort:string):TDataSet;
 end;
//----------------------------------------------------------------------------
constructor Ttelephone.Create(AConn : TAdoConnection);
begin

    q:= TADOQuery.Create(q); <- Ошибка
    q.Connection:= AConn;

end;
//----------------------------------------------------------------------------
destructor Ttelephone.Destroy;
begin
 q.Destroy;
end;
//----------------------------------------------------------------------------
function  Ttelephone.Index(sort:string):TDataSet;
begin
 q.SQL.Text:="SELECT * FROM Telephones ORDER BY"+QuotedStr("comment")+Sort;
 q.active:=true;
 result:=q;
end;
//----------------------------------------------------------------------------
++++вызов+++++
var
tell: Ttelephone;
begin
 tell.Create(Dm.ADOConnection1);
 DataSource1.DataSet:=tell.Index("ASC");
end;


 
Medbe}I{onok XML ©   (2008-08-14 16:04) [25]

За оунера смог бы сойти сам экземпляр твоего замечательного класса

constructor Ttelephone.Create(AConn : TAdoConnection);
begin
 q:= TADOQuery.Create(Self);
 q.Connection:= AConn;
end;


 
Palladin ©   (2008-08-14 16:06) [26]

бред какой то


 
Medbe}I{onok XML ©   (2008-08-14 16:06) [27]

либо вообще nil, так как класс у тебя унаследован не от TComponent что нужно для оунера


 
Medbe}I{onok XML ©   (2008-08-14 16:07) [28]

бред какой то

За пол дня успеваешь забыть от чего там унаследовано сие чудо



Страницы: 1 вся ветка

Текущий архив: 2008.09.28;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.021 c
15-1217935394
data
2008-08-05 15:23
2008.09.28
Посоветуйте цифровую видеокамеру.


15-1217688672
Line
2008-08-02 18:51
2008.09.28
Компьютер загружается минут 15. Что делать?


2-1218611450
cvg
2008-08-13 11:10
2008.09.28
Почему некорректно работает frac?


2-1218737060
programmer90
2008-08-14 22:04
2008.09.28
Полноэкранный режим программы


2-1218740764
programmer90
2008-08-14 23:06
2008.09.28
Как скрыть меню в программе