Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1219253960
Евгений Р.
2008-08-20 21:39
2008.09.28
как восстановить окно messages?


3-1206455333
*Pavel
2008-03-25 17:28
2008.09.28
Перехват SQL команд


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


1-1194871236
Damager
2007-11-12 15:40
2008.09.28
Align, приоритет


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский