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

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

Как в классе динамически создать компонент? [D7]


Страницы:   1 2

sD ©   (2008-08-14 11:53:00) 

Доброго времени суток уважаемы эксперты!
Хочу написать класс, который будет работать с б.д. Классу доступен компонент 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 16:07:00) [1]

бред какой то

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


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

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


Palladin   (2008-08-14 16:06:00) [3]

бред какой то


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

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

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


sD   (2008-08-14 16:02:00) [5]

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


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 15:42:00) [6]

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


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

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

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


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

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


sD   (2008-08-14 15:33:00) [9]

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


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

constructor Create(AConn : TAdoConnection);

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

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


sD   (2008-08-14 15:02:00) [11]

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


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

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


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

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


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

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


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

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


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

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


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

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


sD   (2008-08-14 12:51:00) [18]


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

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


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

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

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


{RASkov}   (2008-08-14 12:41:00) [20]

> [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;


Страницы:   1 2

Наверх

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