Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.49 MB
Время: 0.027 c
14-1103454430
vecna
2004-12-19 14:07
2005.01.09
Посоветуйте че-нить по борьбе с pdf


9-1094180692
MonoLife
2004-09-03 07:04
2005.01.09
Игруху выставил


1-1103823883
focor
2004-12-23 20:44
2005.01.09
EnabledButton


3-1102505582
Stas Kalishenko
2004-12-08 14:33
2005.01.09
Смена языкового драйвера для DBASE


3-1102531028
Sergilov
2004-12-08 21:37
2005.01.09
Помогите создать новый Access файл.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский