Форум: "Прочее";
Текущий архив: 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.003 c