Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> обработка ошибок 
:(
    Опции темы
chiffa
Дата 17.7.2007, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Такой вопрос. как на Делфи сделать "отталкивание от ошибок". К примену на PHP
Код

if (!@$a)
{
break;
}


тоесть если переменная/выражение не существует, а точнее возвращает ошибку нужно остановить цикл. как это можно реализовать на Делфи?
PM MAIL   Вверх
Alexeis
Дата 17.7.2007, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Если память под переменную не выделена то так
Код

if a = nil then break;

А так переменные не умеют возвращать ошибки.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 17.7.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(Alexeis @  17.7.2007,  17:44 Найти цитируемый пост)
Если память под переменную не выделена то так

точнее если указатель = nil...
а выделена или нет память по некоему указателю - так не проверишь ;)
теоретически валидность указателя можно проверить с помощью набора функций:
IsBadCodePtr;
IsBadHugeReadPtr;
IsBadHugeWritePtr;
IsBadReadPtr;
IsBadStringPtr;
IsBadStringPtrA;
IsBadStringPtrW;


Это сообщение отредактировал(а) MetalFan - 17.7.2007, 18:34


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
chiffa
Дата 18.7.2007, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Пытаюсь так:

Код

for i := 1 to 101 do
begin
if Excel.WorkSheets[i].Activate = nil then break;
end;


Выдает: [Pascal Error] Unit2.pas(78): E2008 Incompatible types



PM MAIL   Вверх
Lunatikus
Дата 18.7.2007, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: нет
Всего: 6



Разве свойство Activate не может иметь только true или false?Тогда конечно будет ругаться что ты его сравниваешь с непонятным ему nil.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
lukas
Дата 18.7.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



это дельфи а не php, нужно заботится о типах... (ошибка: несовместимость типов)

Код

for i := 1 to 101 do
begin
if Excel.WorkSheets[i].Activate = False then break;
end;


А nil - это формальный ноль указателя... 


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
chiffa
Дата 18.7.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



спасибо! но код 

Код

for i := 1 to 3 do
begin

if Excel.WorkSheets[i].Activate = False then break;

//MessageDlg('Ошибка открытия ', mtWarning,  [mbYes, mbNo], 0);

Showmessage (inttostr(i));

end;


все три раза выбрасывает табличку с номером, хотя страницы существуют
PM MAIL   Вверх
MetalFan
Дата 18.7.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(chiffa @  18.7.2007,  16:33 Найти цитируемый пост)
все три раза выбрасывает табличку с номером, хотя страницы существуют 


Цитата(chiffa @  18.7.2007,  16:33 Найти цитируемый пост)
if Excel.WorkSheets[i].Activate = False then break;


Activate = false в случае, если невозможна активация запрашиваемой страницы книги...
и вообще, красивее писать так:
Код

if not Excel.WorkSheets[i].Activate then break



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
chiffa
Дата 20.7.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



пасиба. Столкнулся еще с одним траблом.... 

если в ячейки C9 битая формула, Делфи выбрасывает ошибку и останавливает выполнение. Пытаюсь сделать что бы при ошибке вывело сообщение и продолжило выполнять программу дальше... может кто подскажет как это можно реализовать?....
Код

mater:=Excel.WorkSheets[z].Range['C9'];

if mater = nil then
begin
Showmessage ('Лист № ' + inttostr(z) + 'вернул ошибку и не был обработан');

end;


Добавлено через 3 минуты и 26 секунд
Код

for i := 1 to 5 do
begin

if not Excel.WorkSheets[i].Activate then

begin
Showmessage (inttostr(i));
break;
end;

end;


выводит ошибку: Неверный индекс и все....
PM MAIL   Вверх
Alexeis
Дата 20.7.2007, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



Цитата(chiffa @  20.7.2007,  09:50 Найти цитируемый пост)
Делфи выбрасывает ошибку и останавливает выполнение. 

  Нужно пользоваться конструкцией 
Код

try

except / finally

end


т.е. создать защищенный блок, который позволяет обрабатывать исключения.

Это сообщение отредактировал(а) Alexeis - 20.7.2007, 10:54


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sentry
Дата 20.7.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Code Monkey
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 29.1.2007
Где: Москва

Репутация: нет
Всего: 10



Цитата(chiffa @  20.7.2007,  09:50 Найти цитируемый пост)
Делфи выбрасывает ошибку и останавливает выполнение


Если в Tools->Debugger Options изменить соответствующие опции (например, Stop On Delphi Exceptions), то программа не будет останавливаться.
Но если потребуется узнать тип произошедшего исключения, то нужно будет все вернуть обратно.
PM MAIL   Вверх
chiffa
Дата 23.7.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 734
Регистрация: 11.11.2003

Репутация: нет
Всего: -1



Сделал так: 

Код

try
mater:=Excel.WorkSheets[z].Range['C9'];
except
Showmessage ('Лист № ' + IntToStr(z) + ' небыл обработан!');
end;


теперь программа продолжает работу, но системную ошибку о несовместимости типов продолжает выдавать....
PM MAIL   Вверх
Alexeis
Дата 23.7.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 34
Всего: 459



chiffa, может z - это не целое число?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 24.7.2007, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 22
Всего: 128



Цитата(chiffa @  23.7.2007,  09:17 Найти цитируемый пост)
но системную ошибку о несовместимости типов продолжает выдавать.... 


Цитата(sentry @  20.7.2007,  13:28 Найти цитируемый пост)
Если в Tools->Debugger Options изменить соответствующие опции (например, Stop On Delphi Exceptions), то программа не будет останавливаться.




--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0845 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.