Текущий архив: 2008.04.27;
Скачать: CL | DM;
Вниз
Overflow... Найти похожие ветки
← →
i (2008-04-01 22:55) [0]Как данный код может вызвать "Overflow while converting variant of type (LongWord) into type (Integer)." ?:
var
_Now: TDateTime;
begin
_Now := Now;
with FmdAppV2 do
begin
Edit;
Fields[iFinished2ActivePeriod].AsInteger :=
Fields[iFinished2ActivePeriod].AsInteger + v2_ForegroundPeriod;
Fields[iFinished2ActivityPeriod].AsInteger :=
Fields[iFinished2ActivityPeriod].AsInteger + v2_ActivityPeriod;
if Fields[iFinished2ActivityPeriod].AsInteger < 0 then
Fields[iFinished2ActivityPeriod].AsInteger := 0;
Post;
end;
при том, что EurekaLog указывает на 1ю строку с _Now := Now.
(FmdAppV2 - это TMemoryData)
← →
Reindeer Moss Eater © (2008-04-01 23:01) [1]F5 на первой строке потом F9 затем много раз F8
← →
Anatoly Podgoretsky © (2008-04-01 23:02) [2]> i (01.04.2008 22:55:00) [0]
Ты хочешь получить ответ и при не хочешб говорить о свои неизвестных переменных или константах.
Наивный.
← →
i (2008-04-01 23:28) [3]v2_ActivityPeriod: Integer;
v2_ForegroundPeriod: Integer;
iFinished2ActivePeriod = 8;
iFinished2ActivityPeriod = 9;
эти константы точно соответствуют полям таблицы (а тоб был index out of bonds..)
типа полей - ftInteger.
я так понимаю что ерека немного не туда показывает и косяк где-то в работе с таблицей? переполнении integer?
← →
i (2008-04-01 23:30) [4]
> F5 на первой строке потом F9 затем много раз F8
к сожалению, это не у меня происходит.
← →
Reindeer Moss Eater © (2008-04-01 23:37) [5]а ты передай это туда где это происходит
← →
Reindeer Moss Eater © (2008-04-01 23:49) [6](FmdAppV2 - это TMemoryData)
остается только догадаться что же это такое
← →
i (2008-04-01 23:54) [7]:))
короче, такое может случаться если мы пытаемся в integer засунуть большое число? или есть другие варианты?
← →
Reindeer Moss Eater © (2008-04-01 23:55) [8]а ты попробуй
var i : integer;
i := maxint;
i := i + i;
← →
Vasya (2008-04-02 00:14) [9]вроде в TMemoryData все нумеруется с 1. Соотв. поправка сделана?
← →
i (2008-04-02 00:28) [10]
> вроде в TMemoryData все нумеруется с 1. Соотв. поправка
> сделана?
да
← →
i (2008-04-02 00:29) [11]
> Reindeer Moss Eater © (01.04.08 23:55) [8]
>
> а ты попробуй
> var i : integer;
>
> i := maxint;
> i := i + i;
угу, integer переполняется без exception, просто ездит по кругу..
← →
Германн © (2008-04-02 01:02) [12]
> i (02.04.08 00:29) [11]
>
>
> > Reindeer Moss Eater © (01.04.08 23:55) [8]
> >
> > а ты попробуй
> > var i : integer;
> >
> > i := maxint;
> > i := i + i;
>
>
> угу, integer переполняется без exception, просто ездит по
> кругу..
>
А теперь включи опцию {$Q} и проверь ещё раз.
← →
Германн © (2008-04-02 01:16) [13]
> при том, что EurekaLog указывает на 1ю строку с _Now :=
> Now.
У Эврики самая полезная вкладка "Call Stack". На неё в первую очередь и заглядывай.
← →
i (2008-04-02 01:26) [14]>А теперь включи опцию {$Q} и проверь ещё раз.
вижу, эксепшен выглядит иначе - Integer overflow.
"Overflow while converting variant of type (LongWord) into type (Integer)." наводит на мысли об эксепшене при конвертации вариантных типов, тобеж косяк может крыться в AsInteger, не?
← →
i (2008-04-02 01:27) [15]
> У Эврики самая полезная вкладка "Call Stack". На неё в первую
> очередь и заглядывай.
>
тока ей в основном и пользуюсь. я писал что она вообще показывает на строку
_Now := Now;
где тут быть эксепшену?
← →
Германн © (2008-04-02 01:45) [16]
> i (02.04.08 01:26) [14]
>
> >А теперь включи опцию {$Q} и проверь ещё раз.
> вижу, эксепшен выглядит иначе - Integer overflow.
>
> "Overflow while converting variant of type (LongWord) into
> type (Integer)." наводит на мысли об эксепшене при конвертации
> вариантных типов, тобеж косяк может крыться в AsInteger,
> не?
>
Не знаю как в Д7, но поиск в Source BDS2006 файлов содержащих "Overflow while converting variant of type" привело меня к SVarTypeConvertOverflow = "Overflow while converting variant of type (%s) into type (%s)";
А поиск там же файлов содержащих "SVarTypeConvertOverflow" выдал 7 файлов. Разбирайся сам.
← →
Германн © (2008-04-02 01:55) [17]
> i (02.04.08 01:27) [15]
>
>
> > У Эврики самая полезная вкладка "Call Stack". На неё в
> первую
> > очередь и заглядывай.
> >
>
>
> тока ей в основном и пользуюсь. я писал что она вообще показывает
> на строку
> _Now := Now;
>
Кто "она"? Эврика?
Или вкладка "Call Stack"? Так сия вкладка, как правило, показывает много строк в коде. И это естественно для "нелинейного программирования".
← →
Германн © (2008-04-02 02:02) [18]
> i (02.04.08 01:27) [15]
>
>
Ну если уж совсем упрёшься, вышли мне на мыло в анкете эьфа с этой ошибкой. Может помогу чем смогу.
← →
Германн © (2008-04-02 02:12) [19]эьфа читать как эльфа. :)
← →
Loginov Dmitry © (2008-04-02 08:05) [20]> Как данный код может вызвать "Overflow while converting
> variant of type (LongWord) into type (Integer)."
Для присвоения варианта переменной Integer генерируется вызов функции VarToInteger, которая проверяет, входит ли значение, находящееся в Variant в диапазон, допустимый для Integer. В результате функция BoundErr генерирует исключение.
Конкретно в данном коде причина такой ситуации непонятна. Она может возникнут, если v2_ForegroundPeriod (в версии, используемой пользователя) имеет тип Cardinal / Int64.
Разбирайся!
Страницы: 1 вся ветка
Текущий архив: 2008.04.27;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.017 c