![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как заставить выполнить полность все условия
Разветка © (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]этот вариант полностью эквивалентен начальному