![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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 там лишний.
|