Форум: "Начинающим";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];
ВнизКак в классе динамически создать компонент? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.053 c