Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.01.18;
Скачать: [xml.tar.bz2];

Вниз

Хитрости 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
15-1401723069
Dennis I. Komarov
2014-06-02 19:31
2015.01.18
CDO


2-1387193293
Павел
2013-12-16 15:28
2015.01.18
Проблема переноса проекта в XE2


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


15-1402502056
Сергей
2014-06-11 19:54
2015.01.18
состав числа


15-1402175199
Андрюша
2014-06-08 01:06
2015.01.18
Как избежать Deadlock в Firebird?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский