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

Вниз

Почему компилятором неверно обработывается код ?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.026 c
4-1101144729
webmaster
2004-11-22 20:32
2005.01.09
Перетягивани ссылки из ИЕ !!!


14-1103690989
Slider007
2004-12-22 07:49
2005.01.09
Принтер HP Laser Jet 2300n


3-1102596992
galexis
2004-12-09 15:56
2005.01.09
Сколько записей в DBGrid?


3-1102547978
dolphin
2004-12-09 02:19
2005.01.09
какой метод изменения текста в строке определеного столбца


1-1103728361
leonon
2004-12-22 18:12
2005.01.09
Модальная форма из dll