Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

Как отловить ощибку   Найти похожие ветки 

 
zero   (2007-05-10 14:05) [0]

В компоненте ADOStoredProc использую свойвства у столбца MinValues и MaxValues. Когда в этом поле вводишь недопустимое значение выдаёться ошибка на англиском языке хотелось бы вместо этой ошибки вставить своё сообщение. Я вот не пойму где именно надо обрабатывать ошибку ?


 
Ega23 ©   (2007-05-10 14:13) [1]

try

except on E: exception do
begin
 ShowMessage("Вот такая вт фигня...");
end;


 
zero   (2007-05-10 14:22) [2]

Ega23 ©
А куда это вставлять, в этом был вопрос ?


 
Jan1   (2007-05-10 14:22) [3]


> Я вот не пойму где именно надо обрабатывать ошибку

TField.OnValidate + F1

ЗЫ. недавно нашел что не все ошибки ХП ловятся как exception пришлось после работы хранимки еще и ADOConnection.Errors анализировать...


 
sniknik ©   (2007-05-10 14:27) [4]

> хотелось бы вместо этой ошибки вставить своё сообщение.
это "хотение" само по себе ошибка, одна из самых страшных... (я б за такое увольнял нафиг)
программы "русифицированные" подобных образом практически невозможно сопровождать, любая мелочь превращается в глобальную, часто неразрешимую проблему, несравнимую с ленью юзера взять словарь и перевести. (а вернее службы поддержки, т.к. юзера никогда не читают то что им программа пишет, на какой язык не переводи...)

дружеский совет - обломай "хотелку", либо не лезь туда где за твою программу отвечают другие. пиши чисто для себя.


 
zero   (2007-05-10 14:44) [5]

sniknik © - ну и каким образом по твоему тогда их русифицировать ? Вобще мой основной принцып при написании програмы - это максимально комфортная работа юзера, и минимум всяких ошибок.


 
Ega23 ©   (2007-05-10 14:58) [6]


> и минимум всяких ошибок.


Ну и не делай их, в чём проблема-то?


 
sniknik ©   (2007-05-10 15:06) [7]

> ну и каким образом по твоему тогда их русифицировать ?
никаким, что от системы пришло то и показывать, если нужны ошибки по русски то ставь русифицированную систему с которой работаешь (в твоем случае ADO + MSSQL).

> и минимум всяких ошибок.
ага, если действовать по принципу в [1] то ты все ошибки заменяешь на одну. т.е. идеал по твоему, меньше 1-й не бывает.
но зато уж как будет радо ЦТО/внедренцы/юзеры получая вместо причины, понятной ошибки (хоть и на английском) типа "Invalid object name "Table/Procedure name", "Login failed for user "UserName"", и т.д. русское "Вот такая вт фигня..." (либо любое другое что ты сюда вставишь)... и вот когда они с этим промучаются пару недель и прийдут к тебе... беги! как только издалека увидишь их радостные лица, близко советую не подпускать.


 
sniknik ©   (2007-05-10 15:08) [8]

> Ну и не делай их, в чём проблема-то?
ошибка это не только твоя в программе, это еще и информация о недопустимых действиях юзера/ситуации в системе и т.д. и избавиться от них всех нереально.


 
zero   (2007-05-11 07:49) [9]

>ага, если действовать по принципу в [1] то ты все ошибки заменяешь на >одну. т.е. идеал по твоему, меньше 1-й не бывает.
>но зато уж как будет радо ЦТО/внедренцы/юзеры получая вместо причины, >понятной ошибки (хоть и на английском) типа "Invalid object name "Table/>Procedure name", "Login failed for user "UserName"", и т.д. русское "Вот такая >вт фигня..." (либо любое другое что ты сюда вставишь)... и вот когда они с >этим промучаются пару недель и прийдут к тебе... беги! как только >издалека увидишь их радостные лица, близко советую не подпускать.
Ты думаешь все юзеры знают англиский язык, в лучшем случае процентов 20, мне вот например нафиг не надо что бы каждый раз при сообщении Login failed for user "UserName мне звонили, пусть лучше выдаёться "Неправильный логин или пароль" меньше звонков будет, или вот это сообщение Invalid object name "Table/>Procedure name" как ты думаешь какой процент пользователей поймёт это сообщение ?

Кроче решил проблему следующим образом, обработал событие OnSetText, просто  запретил передачу недопустимого значения.


 
sniknik ©   (2007-05-11 08:45) [10]

> Ты думаешь все юзеры знают англиский язык
нет не думаю, знаю, что большинство не знает, также знаю (практика богатая), что таже большинство из них ошибок не читают вообще. максимум чего от них можно добиться это просто факта что какоето сообщение выскакивало... (хуже всего что этим "грешат" и свои же типа "подкованные" которым не раз объяснялось, без информации, возможности воссоздать ситуацию ничего делать, даже начать, невозможно. не говоря уж о "тупых" кассирах/бухгалтерах которые в этом "ни в зуб ногой"(и не должны))
поэтому совершенно неважно на каком языке будет ошибка, те кто на них внимание обращает те и с английским справятся, для остальных это просто "окошечко выскакивало, в нем чтото написано".

> пусть лучше выдаёться "Неправильный логин или пароль"
пусть. только если ты это "переведешь" сам по принципу из [1] то закроешь и остальные возможные и тогда и на "divine by zero" в том же блоке тебе выдаст "Неправильный логин или пароль"... и вот тут ты потратиш усилий гораздо больше, чем ответ на звонок (или даже на сотню).
хотя сделать свое сообщение составным со своим предположением + оригинальной ошибкой элементарно, но так почемуто не делают. (и много чего еще не делают. зато считают себя умнее разработчиков системы заменяя ее функции своими)

> или вот это сообщение Invalid object name "Table/>Procedure name" как ты думаешь какой процент пользователей поймёт это сообщение ?
а вот этого сообщения быть не должно... обращение к несуществующему обьекту на рабочей системе, это глюк разработчика, и если это вылезло у юзера то ему прямая дорога в цто, либо сразу к разработчику. и вот тут главное чтобы ты его понял, это сообщение.

> Кроче решил проблему следующим образом, обработал событие OnSetText, просто  запретил передачу недопустимого значения.
понятно. похоже все мои обьяснения это "бисер перед свиньями"... раз для тебя равнозначны  "отлов", и перевод ошибок с запретом недопустимых значений... т.е. все одно пока не поймешь.


 
zero   (2007-05-11 09:49) [11]

>понятно. похоже все мои обьяснения это "бисер перед свиньями"... раз для >тебя равнозначны  "отлов", и перевод ошибок с запретом недопустимых >значений... т.е. все одно пока не поймешь.
Просто я решил решить задачу другим способом, кстати в этом варианте ошибка вобще не генерируеться.


 
zero   (2007-05-11 09:56) [12]

А вобще если уж на то пошло, то можно вести логи ошибок в каком нибудь файле или на том SQL сервере, где будут храниться подленые сообщения ошибок.
Есть ещё вариант обрабытавать ошибки по их коду.


 
gvv   (2007-05-11 10:13) [13]

try

except on E: exception do
begin
ShowMessage("Вот такая вт фигня..."+#13+e.message);
end;


 
sniknik ©   (2007-05-11 10:40) [14]

> А вобще если уж на то пошло, то можно вести логи ошибок в каком нибудь файле или на том SQL сервере,
> где будут храниться подленые сообщения ошибок.
есть много способов, но пока еще "переводчики" до них дойдут успевают наплодить кучу "оригинальных" прог. с которыми после поддержка мучается. (или начинают так а потом деже поняв ошибку говорят "блин, ну тепер же столько всего переделывать... а оно же вроде работает")
хорошо если кто прочитает ветку и сразу задумается.
и кстати не советую ошибки работы с базой хранить "на том SQL сервере"... рискуешь часть потерять. обьяснить почему?  :)

> Есть ещё вариант обрабытавать ошибки по их коду.
код не у всех есть, а текст может меняться (тот же пример несуществующего обьекта, имя обьекта подставляется... будеш лексический анализ делать? или переводчик типа промта подключать? так он тебе такого напереводит...)


 
zero   (2007-05-11 10:44) [15]

>рискуешь часть потерять. обьяснить почему?  :)
Ну наверное потому, что связи с сервером может и не быть.


 
Ega23 ©   (2007-05-11 12:14) [16]

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnException := AppException;
end;

procedure TForm1.AppException(Sender: TObject; E: Exception);
var
F : TextFile;
Fn : string;
begin
 Fn := ExtractFilePath(ParamStr(0))+"application.log";
 AssignFile(F, Fn);
 try
   if not FileExists(Fn) then Rewrite(F) else Append(F);
   WriteLn(F, DateTimeToStr(Now)+"; " + E.Message);
 finally
   CloseFile(F);
 end;
end;


 
ANB ©   (2007-05-11 12:47) [17]


> рискуешь часть потерять. обьяснить почему?  :)

Аха.
Я частенько, если возникают непонятные ошибки, начинаю логировать их на сервере, чтобы потом была возможность хоть как то это все разгрести. А клиент может и локально ошибку задавить без сообщений и вот тогда точно беда.
Так как можно потерять часть ошибок СУБД, если они пишуться в автономной транзакции в таблицу, живущую в персональном табличном пространстве ?
Ошибки клиента, есно, лучше всего в файлик логгировать.


 
Anatoly Podgoretsky ©   (2007-05-11 13:31) [18]

> zero  (11.05.2007 07:49:09)  [9]

Допустим английский они не
знаю, но вот
издевательства по русски
понимают.
Они тебе жестоко отомщат.


 
Anatoly Podgoretsky ©   (2007-05-11 13:33) [19]

> sniknik  (11.05.2007 08:45:10)  [10]

Например - произошла
ошибка.


 
Anatoly Podgoretsky ©   (2007-05-11 13:34) [20]

> zero  (11.05.2007 09:49:11)  [11]

А вот это умно, зачем
пользователя раздражать,
заблокируем все ошибки
навсегда.


 
zero   (2007-05-11 13:40) [21]

>Anatoly Podgoretsky ©   (11.05.07 13:31) [18]
По моим програмам кстати очень редко звонят, хотя работают с ними каждый день, потому что когда пишу программу стараюсь по максимуму сделать программу простой и предугадать любые нестандартные дейвствия пользователя и коректно на них отреогировать. Хотя и времини на это при разработке уходит больше.


 
Ega23 ©   (2007-05-11 13:46) [22]


> По моим програмам кстати очень редко звонят, хотя работают
> с ними каждый день, потому что когда пишу программу стараюсь
> по максимуму сделать программу простой и предугадать любые
> нестандартные дейвствия пользователя и коректно на них отреогировать.
>  Хотя и времини на это при разработке уходит больше.


Откровенно говоря, в этом есть сомнения. Судя по задаваемым тобой вопросам.


 
zero   (2007-05-11 13:53) [23]

>Ega23 ©   (11.05.07 13:46) [22]
Я то хоть задаю, а есть програмисты которые даже не задумываються об этом.


 
Ega23 ©   (2007-05-11 14:00) [24]


> а есть програмисты которые даже не задумываються об этом.


Есть. Вот только, сдаётся мне, фигово у них программы продаются.


 
Anatoly Podgoretsky ©   (2007-05-11 14:21) [25]

> Ega23  (11.05.2007 14:00:24)  [24]

Продажа программ с ошибками, недоработками не связана, это вообще не имеет отношения к продукту и его качеству.


 
ANB ©   (2007-05-11 16:34) [26]


> Продажа программ с ошибками, недоработками не связана, это
> вообще не имеет отношения к продукту и его качеству.

+1. Видел пару проектов, экземпляры софта которого идут на ура, хотя пользователи заранее знают о куче ошибок в нем. Еще и сами тестируют.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.047 c
2-1186414603
wazaaa
2007-08-06 19:36
2007.09.02
Как спрятать уже открытое окно ?


15-1186529949
lookin
2007-08-08 03:39
2007.09.02
Время просчета пустой процедуры


9-1159091711
Pa5ha
2006-09-24 13:55
2007.09.02
Согласовние анимации в игре


2-1186384703
DmitryFox
2007-08-06 11:18
2007.09.02
Локализация приложения для Китая


15-1186120453
robot1
2007-08-03 09:54
2007.09.02
О Автоматизации





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