Форум: "Потрепаться";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизПочему компилятором неверно обработывается код ? Найти похожие ветки
← →
infom © (2004-12-15 18:51) [0]AString := qData.Fields[IfThen(1=1,10,20)].DisplayName;
← →
DiamondShark © (2004-12-15 19:03) [1]Что такое qData?
Что такое Fields?
Что такое IfThen?
← →
jack128 © (2004-12-15 19:08) [2]И что такое "неверно обработывается"?
;-)
← →
Суслик © (2004-12-15 19:14) [3]
> Что такое IfThen?
сам удивелен был, а такое в delphi есть :))
нажми f1
← →
vuk © (2004-12-15 19:34) [4]Я бы вообще к индексам полей не привязывался, а только исключительно к именам...
← →
aus (2004-12-15 19:36) [5]потому что 1=1 всегда истина, следовательно сразу подставляется результат 10.
← →
Verg © (2004-12-15 19:48) [6]ifThen( I=0, 1, B div I );
← →
KSergey © (2004-12-15 21:02) [7]> Суслик © (15.12.04 19:14) [3]
> > Что такое IfThen?
> сам удивелен был, а такое в delphi есть :)) нажми f1
А в какой версии? В 5- нету...
← →
Alx2 © (2004-12-15 21:04) [8]>KSergey © (15.12.04 21:02) [7]
в D6 есть это:
Conditionally returns one of two specified values.
Unit
Math
or StrUtils
Category
miscellaneous routines
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;
function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload;
function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; overload;
function IfThen(AValue: Boolean; const ATrue: string; const AFalse: string = ""): string; overload;
Description
IfThen checks the expression passed as AValue and returns ATrue if it evaluates to True, or AFalse if it evaluates to False. If the AFalse parameter is omitted, IfThen returns 0 or an empty string when AValue evaluates to False.
← →
infom © (2004-12-16 11:04) [9]DiamondShark © (15.12.04 19:03) [1]
qData : TADOQuery ;
aus (15.12.04 19:36) [5]
1=1 это я для примера вставил, а вообще там выражение
← →
infom © (2004-12-16 11:08) [10]самое интересное этот код корректно обрабатывается
var i:integer;
begin
i:= IfThen(1=1,10,20);
AString := qData.Fields[i].DisplayName;
end;
а этот нет
AString := qData.Fields[IfThen(1=1,10,20)].DisplayName;
← →
}|{yk © (2004-12-16 11:11) [11]В С++ это стандартная тернарная операция
z=x>y?x:y;
← →
DiamondShark © (2004-12-16 11:19) [12]А в чём некорректность-то?
← →
Плохиш © (2004-12-16 11:22) [13]
infom © (16.12.04 11:08) [10]
В Д7 корректно отрабатывается.
← →
infom © (2004-12-16 11:36) [14]Ошибка мол : IfThen возвращает тип String
← →
Digitman © (2004-12-16 13:02) [15]
> infom © (16.12.04 11:36) [14]
> Ошибка мол : IfThen возвращает тип String
если так, то значит ты "гонишь" в [9]
ибо метод TDataSet.Fields[n] требует в кач-ве параметра n именно integer-значение, и компилятор гу никак не может сгенерировать иной код нежели код ф-ции
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;
← →
Плохиш © (2004-12-16 13:09) [16]
>infom © (16.12.04 11:36) [14]
>Ошибка мол : IfThen возвращает тип String
Так я и думал, в справке написано
Unit
Math or StrUtils
← →
Igorek © (2004-12-16 14:05) [17]Делов-то - подключить VCL\Source и оттрасировать. (клавиша F7)
← →
Digitman © (2004-12-16 15:39) [18]
> Igorek © (16.12.04 14:05) [17]
> оттрасировать
не царское это дело - "трассировать" ..
← →
DiamondShark © (2004-12-16 16:23) [19]Так просто всё.
Функции
function IfThen(AValue: Boolean; const ATrue: Integer; const AFalse: Integer = 0): Integer; overload;
function IfThen(AValue: Boolean; const ATrue: Int64; const AFalse: Int64 = 0): Int64; overload;
function IfThen(AValue: Boolean; const ATrue: Double; const AFalse: Double = 0.0): Double; overload;
в модуле Math, а функция
function IfThen(AValue: Boolean; const ATrue: string; const AFalse: string = ""): string; overload;
в модуле StrUtils.
Если прописать в uses strutils после math, то первые функции будут недоступны.
Написать:
AString := qData.Fields[Math.IfThen(1=1,10,20)].DisplayName;
← →
DiamondShark © (2004-12-16 17:17) [20]Хм... Интересно.
После ответа ветка не поднялась...
← →
Плохиш © (2004-12-16 17:25) [21]
>DiamondShark © (16.12.04 16:23) [19]
>Если прописать в uses strutils после math, то первые функции будут недоступны.
Дафай нэ будем.
← →
Cosinus © (2004-12-16 18:02) [22]Хм. У меня похожая ситуация была с какой то из функций при подключении AsyncPro. Я решал ее так : вместо SomeVar:=SomeFunction; я писал SomeVar:=System.SomeFunction; явно указывая на модуль, из которого она вызывается. Может в твоем случае прокатит что то вроде
AString := qData.Fields[Math.IfThen(1=1,10,20)].DisplayName;
. Могу ошибаться, так что прошу сильно не пинать... :)
← →
Cosinus © (2004-12-16 18:03) [23]Млин... Прошу прощения, я не видел
> DiamondShark © (16.12.04 16:23) [19]
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.036 c