Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.01.18;
Скачать: CL | DM;

Вниз

Хитрости variant   Найти похожие ветки 

 
Пит   (2014-06-18 18:19) [0]

Вот создаю Excel Application стандартным COM-сервером... Почему, если писать так:

excel: variant;
...
s1 := excel.Cells[1,1];
if s1 <> "" then...


то все хорошо. Но если написать сразу:

if excel.Cells[1,1] <> "" then ...

то получаем: EVariantInvalidOpError with message "Invalid variant operation"


 
Dimka Maslov ©   (2014-06-18 18:31) [1]

Потому-что в первом случае мы сравниваем две строки, а во втором - неизвестно что с nil.


 
brother ©   (2014-06-18 18:34) [2]

> excel: variant;
> ...
> s1 := excel.Cells[1,1];
> if s1 <> "" then...

расшифровываю:
excel: не известно что
строка:= неизвестно что с приведением типа к строке
стравниваем 2 строки

> if excel.Cells[1,1] <> "" then ...

If неизветно что <> не известно с чем

:)


 
ВладОшин ©   (2014-06-18 19:00) [3]

Но если написать сразу:

if string(excel.Cells[1,1]) <> "" then ...
должно прокатить


 
brother ©   (2014-06-18 19:27) [4]

Удалено модератором


 
Пит   (2014-06-18 19:30) [5]


> а во втором - неизвестно что с nil.

почему с nil, если "" это явно пустая строка?


 
Dimka Maslov ©   (2014-06-18 19:39) [6]

Пустой может быть строка, под которую не выделена память nil, либо первым же символом которой идёт #0. Поэтому сравнение с "" эквивалентно if (Pointer(S) <> nil) and (S[1] <> #0).


 
Ega23 ©   (2014-06-18 19:40) [7]


> это явно пустая строка?


MessageBox(Handle, nil, "", MB_OK);


 
Пит   (2014-06-18 19:55) [8]

Удалено модератором


 
brother ©   (2014-06-18 20:17) [9]

Удалено модератором


 
имя   (2014-06-18 22:07) [10]

Удалено модератором


 
Ega23 ©   (2014-06-18 22:29) [11]


> то должно заработать? Завтра проверю...


Variant может быть и OLEVariant


 
Пит   (2014-06-19 00:04) [12]

Удалено модератором


 
ВладОшин ©   (2014-06-19 08:56) [13]

Удалено модератором


 
Пит   (2014-06-19 09:13) [14]

Удалено модератором


 
Ega23 ©   (2014-06-19 09:17) [15]

Удалено модератором


 
Пит   (2014-06-19 09:27) [16]

Удалено модератором


 
Ega23 ©   (2014-06-19 09:30) [17]

Удалено модератором


 
Пит   (2014-06-19 09:52) [18]

Удалено модератором


 
jack128_   (2014-06-19 10:17) [19]


> и в тоже время по твоей логике килограммам можно присвоить
> метры. И амперы.

в случае вариантов так и есть.

var
 V: Variant;
 S: string;
 Temp: boolean;
begin
 V := "строка";
 Temp := V = "строка"; // работает;

 V := 10;
 Temp := V = "строка"; // падает

 V := 10;
 S := V; // сравнивать со строкой не можем, а преобразовывать в неё - можем.
 Temp := S = "строка"; // работает
end;


 
Пит   (2014-06-19 10:21) [20]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2015.01.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.005 c
15-1402829721
Юрий Зотов
2014-06-15 14:55
2015.01.18
Диск накрылся - чем лечить?


15-1402170178
Kerk
2014-06-07 23:42
2015.01.18
WinXP


2-1383842662
MultIfleX
2013-11-07 20:44
2015.01.18
XE5 Android LocationListener


15-1403027983
oldman
2014-06-17 21:59
2015.01.18
Задачка (запамятовал, была ли на этом форуме)


15-1402045300
Palladin
2014-06-06 13:01
2015.01.18
Ищу работу