Показать сообщение отдельно
  #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;
Ответить с цитированием