![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему датасоурс Nil (не определяется)? (выдает ошибку)Что не так [D6, XP]
Abcdef123 © (2007-06-21 12:50:00)TFRM_Grid = class(TForm_parent)
private
InDataSet : TDataSet;
InDataSrc : TDataSource;
end;
constructor TFRM_Grid.Create(AOwner: TComponent; DtSet : TDataSet);
begin
Self.InDataSet := DtSet;
Self.InDataSrc.DtSet := DtSet;
Create(AOwner);
end;
Abcdef123 (2007-06-21 18:33:00) [21]Насчет Inherited - Однокамушкин правильно прокомментировал Create(AOwner); так же работает.
To Desdechado [2]
У меня задача из одной формы привнести некоторые выбранные данные по query и дальше на другой форме поместить данные в DBGrid и работать в этом гриде.Поэтому при создании новой формы я пытаюсь прихватить этот DataSet из прежней формы, как параметр.
Причем, в указанном коде строка Self.InDataSet := DtSet; вполне читает этот датасет, и я подумала, что я могу датасоурсе назначить, ссылаясь на этот датасет в виде строки Self.InDataSrc.DtSet := DtSet; НО, вот тут и показывает, что значение датасоурса Nil, и дальше идет ошибка AccessViolation, как правильно предположила Ega23.
Я пыталась создать датасоурс, но у меня вылезала ругалось на создание. Похоже, я не умею создавать датасоурс, подскажите, плз, как прописать правильно.
Плохиш (2007-06-21 15:45:00) [22]
> Однокамушкин (21.06.07 15:09) [4]
>
> > Ega23 © (21.06.07 13:52) [3]
> > 1. DataSource не создан
>
> С чего вы это взяли? Тут же не показано, с какими параметрами
> вызывается конструктор и что передаётся в качестве DtSet,
> может, там всё нормально...
Каким боком здесь замешались передаваемые параметры, если пытаются присвоить какое-то значение свойству объекта, ссылка на который должна храниться в приватной переменной InDataSrc и которой(переменной) ничего в конструкторе не было присвоено. Это конструктор, не забываем, до вызова стоящего в нём кода для создаваемого объекта выделяется только память и ничего больше не создаётся.
Ega23 (2007-06-21 15:18:00) [23]
> Тут же не показано, с какими параметрами вызывается конструктор
> и что передаётся в качестве DtSet
В качестве DtSet передаётся указатель на экземпляр класса-потомка TDataSet. nil он, или явный адрес - в данном случае роли не играет.
А вот то, что непосредственно в конструкторе данный параметр присваивается полю InDataSrc, которое имеет вполне конкретный класс TDataSource, создание которого я нигде не вижу. И сильно подозреваю, что в выделенной строке InDataSrc=nil.
Ega23 (2007-06-21 15:14:00) [24]
> С чего вы это взяли? Тут же не показано, с какими параметрами
> вызывается конструктор и что передаётся в качестве DtSet,
> может, там всё нормально...
Как Вы полагаете, с какого фига на выделенной строке валится ошибка? Причём, сильно подозреваю, что AccessViolation.
Anatoly Podgoretsky (2007-06-21 15:13:00) [25]> Однокамушкин (21.06.2007 15:09:04) [4]
> С чего вы это взяли? Тут же не показано, с какими параметрами вызывается конструктор
Поэтому можно считать что угодно, полный карт-бланш
Однокамушкин (2007-06-21 15:09:00) [26]
> Ega23 © (21.06.07 13:52) [3]
> 1. DataSource не создан
С чего вы это взяли? Тут же не показано, с какими параметрами вызывается конструктор и что передаётся в качестве DtSet, может, там всё нормально...
> 2. Не наблюдаю inherited Create
Там же есть вызов Create(AOwner); - это и есть вызов конструктора предка... так как конструктор предка имеет другое имя, тут inherited писать не обязательно, и так всё однозначно...
> 3. constructor нефигово по-другому назвать...
Почему? Даже в VCL полно классов, у которых есть конструкторы, которые называются не Create: TWinControl, TComObject, TDataModule...
Ega23 (2007-06-21 13:52:00) [27]
> Потому, что перед использованием объект надо создать, а
> этого в твоём коде не наблюдается...
1. DataSource не создан
2. Не наблюдаю inherited Create
3. constructor нефигово по-другому назвать...
Desdechado (2007-06-21 12:55:00) [28]Что ты этим кодом хочешь сделать?
Причем тут формы?
Где inherited?
Плохиш (2007-06-21 12:54:00) [29]Потому, что перед использованием объект надо создать, а этого в твоём коде не наблюдается...