Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.089 c
3-1286090959
shadowrun
2010-10-03 11:29
2013.03.22
Ламер и dbexpmys.dll


1-1298637110
evgeso
2011-02-25 15:31
2013.03.22
После закрытия Ошибка Invalid Pointer Operation


2-1345262775
0?0
2012-08-18 08:06
2013.03.22
Не ожидать завершения процедуры.


15-1343593203
alexdn
2012-07-30 00:20
2013.03.22
Марс


3-1283500093
6ruse
2010-09-03 11:48
2013.03.22
ТРИГЕР





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