Форум: "Базы";
Текущий архив: 2002.06.17;
Скачать: [xml.tar.bz2];
ВнизОшибки Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c