Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.01 c
8-55218
Still Swamp
2002-01-25 23:06
2002.06.17
DelphiX


14-55273
lipskiy
2002-05-12 17:20
2002.06.17
1. Лист заявок для UBPFD? ______ 2. Отправка кода без оформления?


1-55184
V.exeR
2002-06-05 01:56
2002.06.17
Опять про TreeView и TMenuItem


7-55339
Miron12
2002-03-15 11:52
2002.06.17
Вопрос по сервисам под win2000!!!


1-55066
Tahion
2002-06-05 17:40
2002.06.17
Как зделать автоповтор содержимого QReport?




   Наверх