Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизкак заставить выполнить полность все условия Найти похожие ветки
← →
Разветка (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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.057 c