|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Обробник помилок в делфі..
Я створив клієнта під б\д на InterBase.. Все прекрасно, але ця програма орієнтується на не досвідченого користувача, а тому я хочу написать обробник помилок на не коректне заповнення полів б\д клієнтом. Або взагалі коли якесь поле не є заповненим, щоб клієнт відразу не повисав, так як у мене((, а просту оброблялася і видавалась помилка.. наприклад поле прізвище не заповнене, заповніть його!!! ну і тому подібне.. Допоможіть!!!!
|
#2
|
|||
|
|||
Украiнска, нiпанятна
|
#3
|
|||
|
|||
Переведите, пожалуйста на русский, английский, татарский или китайский. Тогда смогу помочь.
|
#4
|
|||
|
|||
Цитата:
Я написал клиента под базу данных InterBase.. Все прекрасно, но эта программа ориентируется на неопытного пользователя, а я хочу написать обработчик ошибок на некорректное заполнение полей в базе данных клиентом. В общем, если какое-то поле не заполнено, что б клиент не зависал, так как у меня ((, а просто обрабатывалась и выдавалась ошибка.. например поле Фамилия не заполнено, "заполнить его!!!" Ну и того подобное. Помогите!!!!! У компонента TDataSet - есть событие OnBeforePost, создай обработчик данного события с примерно таким кодом: Код:
procedure TSPUsersForm.qrySprReferBeforePost(DataSet: TDataSet); var ErrorMsg: ansistring; begin with qrySprRefer do //твой датасет begin ErrorMsg := ''; if FieldByName('person_role_id').IsNull then ErrorMsg := ErrorMsg+#10+#13+'- не указана Роль;'; if StrIsNull(FieldByName('fio'),true) then ErrorMsg := ErrorMsg+#10+#13+'- не указано ФИО;'; if StrIsNull(FieldByName('job_position'), true) then ErrorMsg := ErrorMsg+#10+#13+'- не указана Должность;'; if StrIsNull(FieldByName('login'), false) then ErrorMsg := ErrorMsg+#10+#13+'- не указан Логин;'; if StrIsNull(FieldByName('password'), false) then ErrorMsg := ErrorMsg+#10+#13+'- не указан Пароль;'; if ErrorMsg <> '' then begin MessageDlg('Невозможно сохранить запись:' + String(ErrorMsg), mtError, [mbOk], 0); Abort; exit; end; end; end; Код:
function DeleteSpaces(const aValue:String):String; //удаляет из строки пробелы в начале, конце, и в центре двойные пробелы. var st, en:integer; begin Result:=''; if Length(aValue)>0 then begin st:=1;en:=Length(aValue); while (aValue[st] = ' ') do Inc(st); while (aValue[en] = ' ') do Dec(en); Result:=Copy(aValue,st, en-st+1); while (Pos(' ',Result) <> 0) do Delete(Result,Pos(' ',Result),1); end; end; function StrIsNull(const aField:TField; const aIsDeleteSpaces:Boolean):Boolean; // возвращает истину если строковое поле датасета равно нулу или длина поля равна нулю. begin if aField.IsNull then Result:=true else begin if aIsDeleteSpaces then aField.AsString:=DeleteSpaces(aField.AsString); if Length(aField.AsString) = 0 then Result:=true else Result:=false; end; end; Последний раз редактировалось Asinkrit, 04.06.2010 в 09:52. |
#5
|
|||
|
|||
Если вставка делается через запрос то все просто :
Перед выполнением запроса проверяем заполнено то или иное значение, например так: Код:
flag:=true; if length(Trim(фамилия))=0 then fl:=false; if length(Trim(Имя))=0 then fl:=false; if length(Trim(Edit3.text))=0 then fl:=false; if fl then begin Выполняем вставку end else showmessage('Ошибка'); |
#6
|
||||
|
||||
Есть на мой взгляд более правильное решение. На таблице в БД ставим условие по обязательному заполнению полей, а в самой программе секцию с отправкой запроса или на Post обрабатываем на ошибку.
И кстати такой вариант, Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 04.06.2010 в 10:45. |
#7
|
|||
|
|||
Цитата:
Метод Abort, всего лишь прекращает выполнение Post-а. Метод Exit покидает процедуру (остается следить только за порядком проверки). По поводу Halt и Terminate, это те методы, которые я категорически неприемлю), но задумка интересная Пользователь быстро отучится вводить неправильные значения и станет "досвідченого користувача" |
#8
|
|||
|
|||
Дякую за допомогу!!!
|
#9
|
|||
|
|||
Asinkrit, Abort генерирует т.н. Silent Exception. Именно поэтому Exit там лишний.
|