Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

Разветка ©   (2012-06-03 12:12:00) 

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-04 22:37:00) [1]


> 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;


AV   (2012-06-04 10:37:00) [2]

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


oldman   (2012-06-04 09:48:00) [3]

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;

:)))


Anatoly Podgoretsky   (2012-06-04 09:05:00) [4]

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


Anatoly Podgoretsky   (2012-06-04 08:53:00) [5]


> 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 08:51:00) [6]


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

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


antonn   (2012-06-03 23:28:00) [7]


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

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


antonn   (2012-06-03 23:23:00) [8]


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

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


DVM   (2012-06-03 23:17:00) [9]

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


antonn   (2012-06-03 22:54:00) [10]

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


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


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

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


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


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

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


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


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


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


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

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


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


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


Ты не прав


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

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


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


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


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


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

разницы нет


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


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

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

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


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо