Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.06.2010, 21:57
@NDREYK@ @NDREYK@ вне форума
Прохожий
 
Регистрация: 03.06.2010
Сообщения: 5
Репутация: 10
По умолчанию Обробник помилок в делфі..

Я створив клієнта під б\д на InterBase.. Все прекрасно, але ця програма орієнтується на не досвідченого користувача, а тому я хочу написать обробник помилок на не коректне заповнення полів б\д клієнтом. Або взагалі коли якесь поле не є заповненим, щоб клієнт відразу не повисав, так як у мене((, а просту оброблялася і видавалась помилка.. наприклад поле прізвище не заповнене, заповніть його!!! ну і тому подібне.. Допоможіть!!!!
Ответить с цитированием
  #2  
Старый 03.06.2010, 23:03
windaws windaws вне форума
Начинающий
 
Регистрация: 28.08.2009
Сообщения: 116
Репутация: 10
По умолчанию

Украiнска, нiпанятна
Ответить с цитированием
  #3  
Старый 03.06.2010, 23:10
Kapitoshka438 Kapitoshka438 вне форума
Начинающий
 
Регистрация: 09.11.2009
Сообщения: 145
Репутация: 238
По умолчанию

Переведите, пожалуйста на русский, английский, татарский или китайский. Тогда смогу помочь.
Ответить с цитированием
  #4  
Старый 04.06.2010, 09:38
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от @NDREYK@
Я створив клієнта під б\д на InterBase.. Все прекрасно, але ця програма орієнтується на не досвідченого користувача, а тому я хочу написать обробник помилок на не коректне заповнення полів б\д клієнтом. Або взагалі коли якесь поле не є заповненим, щоб клієнт відразу не повисав, так як у мене((, а просту оброблялася і видавалась помилка.. наприклад поле прізвище не заповнене, заповніть його!!! ну і тому подібне.. Допоможіть!!!!
Украинский не такой уж и сложный язык для понимания)

Я написал клиента под базу данных 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  
Старый 04.06.2010, 09:52
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Если вставка делается через запрос то все просто :
Перед выполнением запроса проверяем заполнено то или иное значение, например так:
Код:
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  
Старый 04.06.2010, 10:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Есть на мой взгляд более правильное решение. На таблице в БД ставим условие по обязательному заполнению полей, а в самой программе секцию с отправкой запроса или на Post обрабатываем на ошибку.
И кстати такой вариант,
Цитата:
Abort;
exit;
это уже перебор, осталось только Halt и Application.Terminate добавить
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 04.06.2010 в 10:45.
Ответить с цитированием
  #7  
Старый 04.06.2010, 11:05
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Цитата:
Сообщение от Страдалецъ
И кстати такой вариант
Код:
Abort;
exit;
Непонятно мне, чем тебе не понравилась данная связка, в фирме где я работаю, с десяток больших проектов, вот с такими связками в каждом модуле, работает это все по несколько лет, работает идеально.

Метод Abort, всего лишь прекращает выполнение Post-а.
Метод Exit покидает процедуру (остается следить только за порядком проверки).

По поводу Halt и Terminate, это те методы, которые я категорически неприемлю), но задумка интересная Пользователь быстро отучится вводить неправильные значения и станет "досвідченого користувача"
Ответить с цитированием
  #8  
Старый 04.06.2010, 22:27
@NDREYK@ @NDREYK@ вне форума
Прохожий
 
Регистрация: 03.06.2010
Сообщения: 5
Репутация: 10
По умолчанию

Дякую за допомогу!!!
Ответить с цитированием
  #9  
Старый 05.06.2010, 00:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Asinkrit, Abort генерирует т.н. Silent Exception. Именно поэтому Exit там лишний.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter