Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.17;
Скачать: CL | DM;

Вниз

Ошибки   Найти похожие ветки 

 
Proton   (2002-05-22 21:03) [0]

Господа а не подскажите ли как сделать такое. Вот юзверь вводит данные в форму на поле (например) name стоит свойство not null, то есть должно быть заполненно. Так вот юзверь его не заполнил и нажал Post, после чего вылазит ошибочка типа
The insert failed because a column includes validation constraints. Validation error for comlumn xxxx, value "***NULL***". и SQL код равный -625

1)Так нужно по человечески (извеняюсь по Русски) написать юзверю что поле XXXX

нужно заполнять и тыкнуть его тула (DBEdit_xxxx.setfocus);
Ну и конечно не плохо было бы узнать с какой табличкой такое приключилось?

2)Если у кого есть перевод SQL кодов по скажите где взять или на мыло. Итого нужно знать название поля и таблицы.

3)И еще как отловить ошибки сгенерированные тригером?

Прошу учесть что это все проделовается на IB6 сервер от Firebird, на Delphi 5, для связи с Бд пользуюсь FIBPlus (и клиентом FB).


 
Serhy ©   (2002-05-23 02:14) [1]

1)Если это TTable, то OnBeforePost проверяй. В противном случае - проверяй на ButtonPost.Click.


 
abp ©   (2002-05-23 11:29) [2]

Я в таких случаях поступаю немного подругому, чем рекомендует Serhy. У меня на форме ввода данных присутствуют поля типа TEdit или другие, но не поля типа TDBEdit. Перед тем как вводить данные в базу, я проверяю корректность всех введенных данных. Если все нормально, то данные из полей ввода переносятся в базу, в противном случае использую следующую конструкцию:
if Edit1.Text = "" then // Поле не должно быть пустым
begin
Edit1.SetFocus;
raise Exception.Create("Поле не должно быть пустым");
end;
// Ввод данных в базу


Может это громоздко, но дает 100% гарантию того, что пользователь заполнит все поля и правильно.


 
IrenFD ©   (2002-05-23 12:00) [3]

Если объединить событие BeforePost и вариант предложеный abp,
только вместо Edit1 проверять DBEdit1 все будет работать так-же
Конструкция raise отменит сохранение данных.


 
kaif ©   (2002-05-23 12:42) [4]

Если использовать для редактирования потомков TDataSet, то можно в полях TField указывать Required = True. Кстати, обычно это свойство выставляется автоматически, если поле NOT NULL. Если это все сделано, то ругаться будет уже не сервер, а сам DataSet. Во-первых это быстрее срабатывает, чем реакция сервера.
Во-вторых, используя русские ресурсы для Delphi (есть такая библиотека) можно все перевести на русский не напрягаясь.
В-третьих, Required = True еще и фокус ввода ставит на DataAware control, который служит для редактирования этого поля.

Если же дело дошло именно до реакции сервера, то я рекомендую написать обработчик Application.OnException, где анализировать код ошибки IB и выводить сообщения по вкусу.


 
Proton   (2002-05-23 14:49) [5]

Мне охото не избежать ошибки (проверкой до post"а) и корректно ее обработать - то есть сообщить польователю о ее наличии. Ошибка с назаполнением поля это только пример. Реально могут возникнуть и ошибки связанные с повтором ключевых полей и т.д. Ключевые поля на клиенте проверять нецелесообразно так как это делает сервер - и два разо проверять как то неправильно.

RE> Application.OnException
- вот вопрос как раз в том как этот код проанализировать. Мжет есть какой ни будь другой способ что бы резать полученную строку и выковыривать из нее данные?


 
Johnmen ©   (2002-05-23 15:09) [6]

А еще есть событие OnPostError



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

Текущий архив: 2002.06.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
14-55285
TPavel
2002-05-14 07:48
2002.06.17
быстрое преобразование Фурье


1-55146
Hokum
2002-06-04 10:40
2002.06.17
Как сделать подобие инспектора обектов?


8-55227
SimpleMan
2002-01-30 18:19
2002.06.17
MMSystem...


14-55302
Дремучий
2002-05-15 18:00
2002.06.17
документация по 1с (для програмиста)....


1-55052
MARcoDEN
2002-06-01 10:56
2002.06.17
Поиск в реестре