На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
  
> как програмно вызвать except
    народ что то я не пойму!! как програмно в try .. except .. end вызвать ошибку?
      StrToInt('bla-bla-bla'); :yes:
        да нет. :wacko:
        ExpandedWrap disabled
          try
            работа
            if неверные данные
              !перейти в except с ошибкой!
          except
            log(записать ошибку)
          end;
          if не рулит. Если будет исключение, то программа сама попадет в секцию except.
            ExpandedWrap disabled
              raise Exception.Create;
              Цитата vladimir74 @
              vladimir74

              Ты наверное не понимаешь сам принцип работы try... except... Никаких if не надо! Даже если у тебя в try несколько действий, они будут выполняться по очереди до тех пор, пока не возникнет ошибка. Если ошибка возникнет, программа сама перейдет в except... Тебя это что ли интересует?? А уже обрабатывать ошибку (и записывать ее в лог) - это твои заботы! Чтобы разобраться по какой ошибке приложение перешло в except, можешь в try использовать какой-нибудь флаг, который будет тебе однозначно давать понять, на каком действии произошел сбой.
                стоп!!!!
                if это моя проверка данных!!!! т.е. если мне данные не понравились, должна вызваться ошибка!!
                  Блин, тебе объясняют, что try...except сам отловит исключение. Без всяких if. Засунь в try мой пример из второго поста и посмотри, что будет :wacko:
                    Smike
                    try
                    что то пишем, потом проверяем и если не нравится то
                    raise Exception.Create('очень плохие данны мы не пишем ');
                    except on E: Exception do begin
                    ShowMessage('Ошибка! '+E.Message);
                    end;
                    end;
                    не работает... :angry:

                    Добавлено
                    Цитата Сан Иваныч @
                    Блин, тебе объясняют, что try...except сам отловит исключение. Без всяких if. Засунь в try мой пример из второго поста и посмотри, что будет

                    блин да я же говорю, что нет в этот момент никаких исключений!! не буду же я на ноль делить, чтоб его вызвать или сравнивать строку с числом!!! глупо это
                    Сообщение отредактировано: vladimir74 -
                      vladimir74, то, что ты предлагаешь, можно написать и без исключений. Например, при преобразовании StrToInt проверяешь строку на входе на наличие в ней нечисловых символов, и если таковые будут найдены - пиши, что данные плохие.
                        как бы правильно обьяснить
                        есть общий try ... except end
                        в нем транзакция, с rollback в except end. и записью в лог вида ошибки. Выход из масива, неактивная таблица и т.д. эти исключения try найдет сам, для того он и создан. но мне надо проверить на едентичность данных, и переписать таблицу только в определенном случае. Теоретически этой ошибки произойти не может, но на практике, один раз произошло и данные записались не верно :angry: потому и хочу, в этом случае выйти из процедуры с возвратом всего что надо....
                        не писать же после каждой проверки свой rollback . А в лог должно писаться почему вызвана ошибка
                          А в событии BeforePost() нельзя проверить? И если найдены ошибки, то Abort() и никаких проблем!
                            Сан Иваныч
                            но ведь это не красиво, и если у меня несколько таких проверок (в моем случае 3) то хочется в логе видеть какая именно проверка пошла боком...
                              Да хоть десять проверок. Именно в BeforePost() пишешь
                              ExpandedWrap disabled
                                  try
                                    StrToInt(str);
                                  except
                                    ShowMessage('Неверное значение .....');
                                    WriteToLog('ошибка в типе данных для поля XXX');
                                    Abort();
                                  end;
                                  // и так для всех проблемных полей
                                Цитата Сан Иваныч @
                                А в событии BeforePost() нельзя проверить? И если найдены ошибки, то Abort() и никаких проблем!

                                нет тут процедура связываюшая около 10 таблиц когда insert, когда edit. сильно много проверять придется.
                                Ладно, если ничего такого нет, придется переписывать процедуру, или 3 раза писать rollback и лог..... :angry:
                                  ExpandedWrap disabled
                                    procedure TForm1.Button1Click(Sender: TObject);
                                    var
                                      n,m: Integer;
                                    begin
                                      n := 18;
                                      m := 6;
                                      try
                                        n := n div m;
                                        if n=2 then Raise Exception.Create('Error Data2');
                                        if n=3 then Raise Exception.Create('Error Data3');
                                      except
                                        on E: Exception do ShowMessage(E.Message);
                                      end;
                                    end;
                                    Демо
                                    и у тебя это работает??
                                    у меня то же самое не сработало!!!!!!!

                                    Добавлено
                                    бдин ИДИОТ!!! вопрос решен!! вернее я все правильно делал!!! просто у меня был дебаг модус включен... а потом я не должлался своего окна :(
                                    все работает правильно

                                    Добавлено
                                    на этом вопрос решен
                                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                    0 пользователей:


                                    Рейтинг@Mail.ru
                                    [ Script execution time: 0,0462 ]   [ 16 queries used ]   [ Generated: 27.07.25, 15:31 GMT ]