Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1207067229
AntonUSAnoV
2008-04-01 20:27
2008.04.27
как создать папку


15-1205764292
@!!ex
2008-03-17 17:31
2008.04.27
Замена процессора у ноута


2-1207311044
TCrash
2008-04-04 16:10
2008.04.27
Размеры меню


2-1207218731
alexnmsk
2008-04-03 14:32
2008.04.27
TClass??


4-1188377902
-=Domix=-
2007-08-29 12:58
2008.04.27
Графика в консоли