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

Вниз

как заставить выполнить полность все условия   Найти похожие ветки 

 
Разветка   (2012-06-03 12:12) [0]

if ((QueryImport.FindField("Дата") = Nil) or
    (QueryImport.FindField("Расход") = Nil) or
    (QueryImport.FindField("Валюта") = Nil) or
    (QueryImport.FindField("Информация") = Nil)) then
   begin
     MessageBox(Handle,PChar("Неудалось выполнить импорт данных."),
                PChar(mb_caption),MB_ICONWARNING);
     exit;
   end;


Почему то проверяется первое условие  ((QueryImport.FindField("Дата") = Nil) а остальные  не проверяются
как заставить проверять все?


 
Медвежонок Пятачок ©   (2012-06-03 12:13) [1]

потому что все проверять не надо. достаточно одного


 
Разветка   (2012-06-03 12:15) [2]

Кажется была специальная деректива компилятору, вот чего то вспомнить не могу, может кто подскажет?


 
Медвежонок Пятачок ©   (2012-06-03 12:18) [3]

и что изменится если директива нужная будет?
ничего.


 
Разветка   (2012-06-03 12:20) [4]


> Медвежонок Пятачок ©   (03.06.12 12:13) [1]
> потому что все проверять не надо. достаточно одного


Вот после первого и бросает проверять а нужно все условия, что бы по полному проверял все 4 условия


 
Медвежонок Пятачок ©   (2012-06-03 12:21) [5]

в этой программе ничего не изменится даже если будут проверены все условия до единого


 
Разветка   (2012-06-03 12:22) [6]


> Медвежонок Пятачок ©   (03.06.12 12:18) [3]
> и что изменится если директива нужная будет?ничего.


Поверь - изменится


 
Медвежонок Пятачок ©   (2012-06-03 12:23) [7]

ничего не изменится. абсолютно


 
Разветка   (2012-06-03 12:36) [8]

  if QueryImport.FindField("Дата") = nil then exit;
  if QueryImport.FindField("Расход") = Nil then exit;
  if QueryImport.FindField("Валюта") = Nil then Exit;
  if QueryImport.FindField("Информация") = Nil then exit;


В таком случае нужно 4 выражения записать одним выражением, а может так и оставить да не париться?


 
Медвежонок Пятачок ©   (2012-06-03 12:40) [9]

этот вариант полностью эквивалентен начальному


 
Разветка   (2012-06-03 12:44) [10]


> Медвежонок Пятачок ©   (03.06.12 12:23) [7]

какие лучше использовать конструкции
где много отдельных
 if (условие1) then
 ................
 if (условие5) then

или if (выражение1)(..2)(..3)(выажение4) then


 
Медвежонок Пятачок ©   (2012-06-03 12:46) [11]

разницы нет


 
Разветка   (2012-06-03 12:46) [12]


> Медвежонок Пятачок ©   (03.06.12 12:40) [9]
> этот вариант полностью эквивалентен начальному


втаком случае первый вариант не работае, а второй причем всегда работает.


 
Медвежонок Пятачок ©   (2012-06-03 12:47) [13]

оба варианта одинаковы


 
Разветка   (2012-06-03 12:53) [14]


> Медвежонок Пятачок ©   (03.06.12 12:47) [13]
> оба варианта одинаковы


Ты не прав


 
Медвежонок Пятачок ©   (2012-06-03 13:08) [15]

мне этого и не требуется.
потому что я лев.


 
Разветка   (2012-06-03 13:14) [16]


> Разветка   (03.06.12 12:53) [14]
> > Медвежонок Пятачок ©   (03.06.12 12:47) [13]> оба варианта
> одинаковыТы не прав


это шутка была ;-)


 
Юрий Зотов ©   (2012-06-03 13:18) [17]


> Разветка   (03.06.12 12:53) [14]

1. Опция $B - это та, о которой Вы спрашивали.
2. Почитайте справку по ней.
3. Убедитесь, что Вы неправы, а Пятачок прав.
4. Стоит ли спорить о том, чего не знаешь?


 
Разветка   (2012-06-03 13:35) [18]


> Юрий Зотов ©   (03.06.12 13:18) [17]

Спасибо . Медвежонок Пятачок ©  - обсолютно прав!
Как всегда проблема была в другом, просто характер у меня такой везде вижу заговоры ;-)


 
antonn ©   (2012-06-03 22:54) [19]

QueryImport.FindField() - это функция? Тогда разница может быть выполнится ли она с опеределенным значением параметра или нет. Но это неочевидно, конечно же...


 
DVM ©   (2012-06-03 23:17) [20]

Если QueryImport.FindField делает еще какую либо работу, кроме возврата Nil/не Nil, то разница будет, вызывать все или только первую, но имхо тогда это будет плохой дизайн.


 
antonn ©   (2012-06-03 23:23) [21]


> DVM ©   (03.06.12 23:17) [20]

я про другое: ее можно перекрыть? и, например, ввести логирование внутри QueryImport.FindField(). Тогда на результат условия это не повлияет, но в работе программы будет разница: выполнятся ли все условия или только одно. Потому однозначно сказать что разницы нет и достаточно выполнения одного - нельзя. Потому и есть опция


 
antonn ©   (2012-06-03 23:28) [22]


> DVM ©   (03.06.12 23:17) [20]

тьфу, мы про одно и тоже говорим :)


 
Anatoly Podgoretsky ©   (2012-06-04 08:51) [23]


> Если QueryImport.FindField делает еще какую либо работу,
>  кроме возврата Nil/не Nil

Это функия, но возвращает не nil, а TFieldn и ничего больше


 
Anatoly Podgoretsky ©   (2012-06-04 08:53) [24]


> FindField is the same as the FieldByName method, except
> that it returns nil (Delphi) or NULL (C++) rather than raising
> an exception when the field is not found.


 
Anatoly Podgoretsky ©   (2012-06-04 09:05) [25]

QueryImport.FindField("Дата");
  QueryImport.FindField("Расход");
  QueryImport.FindField("Валюта");
  QueryImport.FindField("Информация");
if ((QueryImport.FindField("Дата") = Nil) or
   (QueryImport.FindField("Расход") = Nil) or
   (QueryImport.FindField("Валюта") = Nil) or
   (QueryImport.FindField("Информация") = Nil)) then


 
oldman ©   (2012-06-04 09:48) [26]

i=0;
if QueryImport.FindField("Дата") = Nil then i:=i+1;
if QueryImport.FindField("Расход") = Nil then i:=i+10;
if QueryImport.FindField("Валюта") = Nil then i:=i+100;
if QueryImport.FindField("Информация") = Nil then i:=i+1000;
if i>0 then begin
    {анализируем i, точно выявляем какие if сработали}
    MessageBox(Handle,PChar("Неудалось выполнить импорт данных."),
               PChar(mb_caption),MB_ICONWARNING);
    exit;
end;

:)))


 
AV ©   (2012-06-04 10:37) [27]

A,A1,A2: TField;

A := QueryImport.FindField("Дата") ;
A1 := QueryImport.FindField("Дата1") ;
A2 := QueryImport.FindField("Дата2") ;

if (
   (A = Nil) or
   (A1 = Nil)  or
   (A2 = Nil)  or
   (A3 = Nil)
) then
  begin


 
Разветка   (2012-06-04 22:37) [28]


> Anatoly Podgoretsky ©   (04.06.12 08:51) [23]
> > Если QueryImport.FindField делает еще какую либо работу,
> >  кроме возврата Nil/не NilЭто функия, но возвращает не
> nil, а TFieldn и ничего больше


А еще в некоторых случаях еще что то

function TDataSet.FindField(const FieldName: WideString): TField;
begin
 Result := FFields.FindField(FieldName);
 if (Result = nil) and ObjectView then
   Result := FieldList.Find(FieldName);
 if Result = nil then
   Result := FAggFields.FindField(FieldName);
end;

function TFields.FindField(const FieldName: WideString): TField;
var
 I: Integer;
begin
 for I := 0 to FList.Count - 1 do
 begin
   Result := FList.Items[I];
   if WideCompareText(Result.FFieldName, FieldName) = 0 then Exit;
 end;
 Result := nil;
end;



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.064 c
15-1346445002
Юрий
2012-09-01 00:30
2013.03.22
С днем рождения ! 1 сентября 2012 суббота


2-1348424060
buddypetrovich
2012-09-23 22:14
2013.03.22
serversocket1 vs clientsocket1


2-1335777792
Vladolin7
2012-04-30 13:23
2013.03.22
Как ввести данные в поле Memo?


15-1340803269
AV
2012-06-27 17:21
2013.03.22
А вы сегодня как накосячили на свою голову? :)


15-1331485386
PiramidaHeiopz
2012-03-11 21:03
2013.03.22
Площадь заливки чернилами