Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.29;
Скачать: CL | DM;

Вниз

Оператор is   Найти похожие ветки 

 
Nazareth   (2002-08-19 12:30) [0]

Всем привет.
Почему оператор is выдает вызывает "access violation" в следующем
фрагменте?
if Assign(FDataCources[t]) and (TComponent(FDataCources[t]) is TChartSeries) then ...
По идее, в худшем случае он должен вернуть false?


 
Nazareth   (2002-08-19 12:31) [1]

Конечно же Assigned :-)))


 
Digitman ©   (2002-08-19 12:35) [2]

AV, скорей всего, ты получаешь не из-за IS. До него дело не доходит. Исключение возбуждается, видимо, при попытке явного приведения типа TComponent(FDataCources[t]), где FDataCources[t] в этот момент вообще не является объектом - "мусор" в этом элементе массива/списка


 
Nazareth   (2002-08-19 12:37) [3]

Что же делать?


 
Anatoly Podgoretsky ©   (2002-08-19 12:42) [4]

А t допустиый?


 
Nazareth   (2002-08-19 12:43) [5]

Да, от 0 до Count - 1


 
Skier ©   (2002-08-19 12:49) [6]

>Nazareth
А зачем ты вообще приводишь FDataCources[t] к TComponent-у ?
Можно и так написать ... and (FDataCources[t] is TChartSeries)...если, конечно, FDataCources[t] - это объект.


 
Nazareth   (2002-08-19 12:50) [7]

FDataSources - TList


 
Digitman ©   (2002-08-19 12:50) [8]

>Nazareth

Что делать ?
Не допускай "мусора" в элементе массива/списка. Либо там должен быть nil (для прерывания в твоей строчке проверки сразу же на Assigned) либо - ссылка на реально существующий объект-наследник TComponent.
Уничтожение тем или иным образом в том или ином месте кода объекта, ссылка на который хранится в элементе проверяемого тобой в последствии списка/массива, должно немедленно сопровождаться либо уничтожением элемента данного списка/массива либо сбросом его в nil, дабы обеспечить корретность результата предварительной проверки на Assigned().


 
Skier ©   (2002-08-19 12:54) [9]

>Nazareth
Перепиши условие так :

if Assign(FDataCources[t]) and (FDataCources[t] is TChartSeries) then ...

И проверь стоит ли у тебя в опциях компилятора
"Сокращённое вычисление логических выражений"




 
Nazareth   (2002-08-19 12:55) [10]

Это не я а ребята, написавшие Teechart 5.02.
То есть элементы FDataSources, где-то уже были освобождены или в FDataSources вообще непонятно что?


 
Anatoly Podgoretsky ©   (2002-08-19 12:55) [11]

Nazareth (19.08.02 12:50)
Вопрос был не о FDataSources, а о FDataSources[t]
Теперь тебе осталось только действовать согласно приведенным рекомендациям и это включает отказ от приведения TComponent(FDataCources[t]) абсолютно чужеродный здесь механизм, чреватый оишибками времени исполнения.


 
Skier ©   (2002-08-19 12:59) [12]

>Nazareth
А что вообще заносится в список (FDataSources - TList) ?
Какие объекты и объекты ли это вообще ? Проверь...


 
Fiend ©   (2002-08-19 13:00) [13]

Лучче так:
if (FDataCources[t]<>nil)and(TObject(FDataCources[t]) is TChartSeries) then
Я так понимаю FDataCources[t] - pointer, поэтому проверяем сначала, указывает ли он куда-то.
А ваще, смысла большого не вижу проверять на nil или Assigned.
По идее если это что то от TChart, то при удалении серии, элемента уже не должно быть в списке. Поэтому я бы просто привел к TObject и проверил его тип.
if TObject(FDataCources[t]) is TChartSeries then


 
Nazareth   (2002-08-19 14:10) [14]

В DataCources[t], насколько я понял, хранятся TComponent"ы. Попробовал убрать явное приведение типов - выдается ошибка "Operator not applicable to this operand type".


 
Skier ©   (2002-08-19 14:14) [15]

>Nazareth
А скажи-ка вот что : в каком методе (и в каком классе) ты делаешь
эту проверку ?


 
Nazareth   (2002-08-19 14:16) [16]

TChartSeries.RemoveAllLinkedSeries - модуль TeEngine.pas


 
Ученик ©   (2002-08-19 14:17) [17]

>Nazareth (19.08.02 12:30)
Что нужно сделать чтобы ошибка возникла с момента File-New-Application и помещения TChart на форму ?


 
Nazareth   (2002-08-19 14:21) [18]

Создать серию и задать для нее DataSource (DataSet).


 
Ученик ©   (2002-08-19 14:30) [19]

>Nazareth (19.08.02 14:21)
Создал TBarSeries, Источник данных Table1, Labels - имя текстового поля, Bar-Имя вещественного поля, после запуска приложения и его закрытия ошибки нет.


 
Nazareth   (2002-08-19 14:45) [20]

Teechart 5.02?


 
Ученик ©   (2002-08-19 14:47) [21]

>Nazareth (19.08.02 14:45)
5.01


 
Nazareth   (2002-08-19 14:54) [22]

Не подилишься? А то долго разбираться, а времени в обрез.


 
Ученик ©   (2002-08-19 14:58) [23]

>Nazareth (19.08.02 14:45)
C 5.02 тоже все нормально, попробовал


 
Nazareth   (2002-08-19 15:00) [24]

Delphi 6? Interbase 6.0?


 
Ученик ©   (2002-08-19 15:01) [25]

Delphi 6.0

Table1-DBF


 
Ученик ©   (2002-08-19 15:10) [26]

C Interbase Express тоже все нормально, пробуешь на пустом проекте или в своем ?


 
Nazareth   (2002-08-19 15:16) [27]

Создал простенький запрос к той же базе - вроде работает. Где копать?


 
Ученик ©   (2002-08-19 15:21) [28]

Чем простенький отличается от нерабочего ? может DataSource в других формах, после Application.Run в файле проекта попробуй принудительно "убить" форму с TDBChart


 
Nazareth   (2002-08-19 15:34) [29]

Сделал точно такой же запрос, правда в другом проекте, - работает. И запрос - статический.


 
Nazareth   (2002-08-19 16:17) [30]

> Ученик
Работает пока одна серия. Пробовал, если больше?
Если не тяжело, вышли мне 5.01 на abc2003@tut.by.


 
Ученик ©   (2002-08-19 16:34) [31]

>Nazareth (19.08.02 16:17)
Напиши какой вариант не работает.

P.S.Проверь почту


 
Nazareth   (2002-08-19 16:50) [32]

Если серии имеют случайный источник данных, то серий могу добавлять сколько угодно. Но если источник - бд, то одна серия - все нормально. Как только ставлю DataSet для любой
второй серии - Access violation.


 
Nazareth   (2002-08-19 17:52) [33]

>Ученик
Спасибо за 5.01
Но как его поставить? Требует vcl60.


 
Ученик ©   (2002-08-19 17:54) [34]

На какой версии Delphi ? Какая библиотека ?


 
Nazareth   (2002-08-19 17:58) [35]

Delphi 6. Пытаюсь откомпилировать te56.dpk - пишет, что vcl60 not found


 
Ученик ©   (2002-08-19 18:03) [36]

Странно, исправь на vcl


 
Nazareth   (2002-08-19 18:23) [37]

vcl поменял - нормально. Затык на vclbde.dcu


 
Ученик ©   (2002-08-19 18:35) [38]

Что то как то сложно идет, наверно, этого делать не надо, с 5.02
все работает, сколько угодно DataSet-ов, проблема в чем то другом, на простом примере после добавления двух TBarSeries, что делаешь, какие свойства устанавливаешь ?


 
Nazareth   (2002-08-19 19:03) [39]

Просто цепляю к dataset"у запрос, устанавливаю поля по осям и все. Свойства использую стандартные (их там столько, что и не перечислишь). Вообще на Teechart 4.04 все работало отлично. Но мне нужно было выровнять лэйбы на левой оси по правому краю. А в 4.04 свойства AlignLabels нет.


 
Ученик ©   (2002-08-19 19:10) [40]

>Nazareth (19.08.02 19:03)
Так на простом примере никак не смоделировать ? (сложно указать причину ошибки, которую не видишь)



Страницы: 1 2 вся ветка

Текущий архив: 2002.08.29;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.014 c
1-95900
Shrek
2002-08-18 19:57
2002.08.29
Размер приложения 2 мегабайта в место 300 КЛб!


3-95635
Faun
2002-08-09 21:48
2002.08.29
Кто-нибудь сталкивался?


1-95792
Riko
2002-08-19 17:39
2002.08.29
Очистки кеша


1-95777
-= Like =-
2002-08-19 17:26
2002.08.29
Запись, чтение, поиск строки.


3-95645
perov
2002-08-07 14:19
2002.08.29
Блокировка