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