Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"Правильно" преобразовать тип Variant [D7, WinXP]


Jungle ©   (2008-05-26 17:13:00) 

var
i: Шnteger;
v: Variant;
....
v := 1.5;
i := VarAsType(v, varInteger);
...

В данном случае i = 2, а хотелось бы, чтоб генерировалось исключение о несоответствии типов. Можно, конечно, сначала преобразовать значение v в строковое, а потом воспользоваться функцией StrToInt. В этом случае будет генерироваться EConvertError, однако это же исключение будет генерироваться и в случае слишком большого значения v. А функция VarAsTypeв случае переполнения генерирует EVariantOverflowError.

Вопрос: есть ли стандартный способ правильно сконвертировать значение, чтобы корректно отловить оба типа исключений (переполнение и несоответствие типов) и не городить при этом кучу лишнего кода?


Leonid Troyanovsky   (2008-05-27 11:14:00) [1]


> Leonid Troyanovsky ©   (27.05.08 11:01) [7]

>      raise EVariantError.CreateFmt('Invalid variant type
> conversion: %s', [E.Message]);

uses SysConst;

raise EVariantError.CreateFmt('%s: %s', [SInvalidVarCast, E.Message]);

--
Regards, LVT.


Leonid Troyanovsky   (2008-05-27 11:01:00) [2]


> Jungle   (26.05.08 17:13)  

> Вопрос: есть ли стандартный способ правильно сконвертировать
> значение, чтобы корректно отловить оба типа исключений (переполнение
> и несоответствие типов) и не городить при этом кучу лишнего
> кода?


function VarToInt(v: variant): Longint;
begin
 try
   Result := StrToInt(v);
 except
   on E: EConvertError do
     raise EVariantError.CreateFmt('Invalid variant type conversion: %s', [E.Message]);
 end;
end;

--
Regards, LVT.


Anatoly Podgoretsky   (2008-05-27 09:39:00) [3]

raise EConvertError .Create;


Jungle   (2008-05-27 09:26:00) [4]

Gadenysh
Точно. Благодарю. А то я как всегда в дебри полез :)


Gadenysh   (2008-05-27 08:39:00) [5]

ну так и сравни результаты приведения к Integer и Float


Jungle   (2008-05-27 08:28:00) [6]

Palladin
Под исключением о несоответствии типов я имел в виду что-то типа EConvertErrorили EVariantTypeCastError.

clickmaker
А если у меня v = '1'(строковый), а TypeToConvert = varInteger? В этом случае VarType(v) <> TypeToConvert, но я могу преобразовать v в Integer. Если v = '1,5', то в результате преобразования получу опять 2.


clickmaker   (2008-05-26 17:21:00) [7]

if (VarType(v) <> TypeToConvert) then
 несоответствие типов
?


Palladin   (2008-05-26 17:15:00) [8]


> исключение о несоответствии типов

такого исключения нет, суть есть ошибка компиляции


Наверх

Титульная страница Поиск, карта сайта Написать письмо