Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2013, 11:58   #1
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию совсем запутался в if then, else begin

есть вот такой рабочий код

Код:
begin
  if (Length(edtnaimenov.Text) = 0) or (Length(edtopisa.Text) = 0) then ShowMessage('Неполная информация о товаре!')

  else begin
if DataModule2.mytbl3.Modified then   DataModule2.mytbl3.Post;
 Form5.myqry3.Active:=false;
         Form5.myqry3.Active:=true;
Form9.Close;    end;
end;
он проверяет все ли 2 обязательных поля заполнены, прежде чем сохранить в базу, но мне нужна еще одна проверка, которая поищет по базе и если найдет товар с таким же сн, то выдаст ошибку



Код:

          myqry1.Active:=false;
myqry1.SQL.Clear;
myqry1.SQL.Add('select * from ofice where sntm='+quotedstr(edtdbedtcompanysntm.Text));
myqry1.Active:=True;

    if    myqry1.RecordCount  = 1 then ShowMessage('Терминал с таким С\Н уже есть!')   ;
У меня не как не получается правильно вонзить 2 кусок в 1, либо проверка игнорируется и запись все равно идет, либо работает,но только если сразу указать сущ сн,если же сначала незаполнить поле, а потом сн - то пропустит. как правильно написать условие


если все проверки пройдены то должно быть

Код:
if DataModule2.mytbl3.Modified then   DataModule2.mytbl3.Post;
       Form5.myqry2.Active:=false;
         Form5.myqry2.Active:=true;
Form9.Close;
undead92 вне форума Ответить с цитированием
Старый 08.07.2013, 15:46   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

Оформите проверку функцией, как-нибудь так:
Код:
function Proverka2(const s:string):boolean;
  begin
    myqry1.close;
    myqry1.SQL.Text:='select * from ofice where sntm='+quotedstr(s);
    myqry1.open;
    Result:=myqry1.isempty;
    if Result then ShowMessage('Терминал с таким С\Н уже есть!');
  end;
И соответсвенно в месте проверки будет:
Код:
 if (Length(edtnaimenov.Text) = 0) or (Length(edtopisa.Text) = 0) or Proverka2(edtdbedtcompanysntm.Text) then ShowMessage('Неполная информация о товаре!')

Последний раз редактировалось astecenko; 08.07.2013 в 15:49.
astecenko вне форума Ответить с цитированием
Старый 09.07.2013, 09:29   #3
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

спасибо, удобнее) у меня тоже получилось но громоздко

Код:
begin
myqry1.Active:=false;
myqry1.SQL.Clear;
myqry1.SQL.Add('select sntm from ofice where sntm='+quotedstr(edtdbedtcompanysntm.Text));
myqry1.Active:=True;
                      if (Length(edtdbedtcompanytmnazvanie.Text) = 0) or (Length(edtdbedtcompanysntm.Text) = 0) or (Length(edtglogps.Text) = 0) then ShowMessage('Неполная информация о товаре!')

                  else
                                         if    myqry1.RecordCount  >= 1   then ShowMessage('Терминал с таким С\Н уже есть!')
                  else



                 begin

if DataModule2.mytbl3.Modified then   DataModule2.mytbl3.Post;
       Form5.myqry2.Active:=false;
         Form5.myqry2.Active:=true;
Form9.Close;
                Form5.rb2.Checked:=True;

         end ;



   end;
undead92 вне форума Ответить с цитированием
Старый 09.07.2013, 09:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

undead92, кто Вас учил так форматировать код?!!
Немудрено в таком коде запутаться!

сравните с
Код:
begin
  if (Length(edtdbedtcompanytmnazvanie.Text) = 0) or (Length(edtdbedtcompanysntm.Text) = 0) or (Length(edtglogps.Text) = 0)
    then ShowMessage('Неполная информация о товаре!')
  else begin
    myqry1.Active := false;
    myqry1.SQL.Clear;
    myqry1.SQL.Add('select sntm from ofice where sntm=' + quotedstr(edtdbedtcompanysntm.Text));
    myqry1.Active := True;
    if myqry1.RecordCount >= 1 then ShowMessage('Терминал с таким С\Н уже есть!')
    else
    begin
      if DataModule2.mytbl3.Modified then DataModule2.mytbl3.Post;
      Form5.myqry2.Active := false;
      Form5.myqry2.Active := true;
      Form9.Close;
      Form5.rb2.Checked := True;
    end;
  end;
end;

p.s. хотя, я тоже за то, чтобы выносить код в отдельные функции/процедуры.
Это и удобнее, и нагляднее, и отладку упрощает...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как составить SQL запрос(запутался совсем) Messir_Leonard SQL, базы данных 2 17.03.2013 15:22
procedure TForm1.Timer1Timer(Sender: TObject); var h:hwnd; begin //if f1 if getasynckeystate($20)<>0 then begin if FindWin Kazik Помощь студентам 2 18.11.2012 20:44
Ошибка BEGIN nemq Помощь студентам 6 01.01.2010 11:33