![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как в классе динамически создать компонент? [D7]
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;