Форум: "Основная";
Текущий архив: 2002.08.29;
Скачать: [xml.tar.bz2];
Вниз
Оператор 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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.007 c