Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 028

/ вопрос открыт /

Приветствую, уважаемые эксперты!
Как сделать в DBGrid поля обязательными для заполнения и задать возможный диапозон из значений(числовой)? Спасибо!

Mav3rick Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Mav3rick (статус: Посетитель)
Вопрос отправлен: 23 июля 2009, 12:31
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Лед и Пламень

Ну грид для этого не предназначен.
Лучше конешно в СУБД, но если уж хочешь в клиенте, то обрабатывай свойство BeforePost своего набора данных (Ttable, TQuery или кто там у тебя)

Приложение:
  1. procedure query.BeforePost(DataSet: TDataSet);
  2. begin
  3.  
  4. if
  5.  
  6. begin
  7.  
  8. dataset.Cancel;
  9. end;
  10. end;


Ответ отправил: Лед и Пламень (статус: 1-ый класс)
Время отправки: 23 июля 2009, 13:06
Оценка за ответ: 5

Комментарий к оценке: Спасибо

Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 23 июля 2009, 16:15; участников в обсуждении: 2.
Mav3rick

Mav3rick (статус: Посетитель), 23 июля 2009, 13:37 [#1]:

вот только не beforePost , а AfterPost
Лед и Пламень

Лед и Пламень (статус: 1-ый класс), 23 июля 2009, 14:09 [#2]:

Нет. AfterPost возникает ПОСЛЕ того как данные записаны в БД. тут уже поздо.
А beforePost возникает ДО записи, и есть возможность проконтролировать и отменить ввод данных в БД
Mav3rick

Mav3rick (статус: Посетитель), 23 июля 2009, 14:14 [#3]:

наверное... у меня просто немножко подругому... скажите, Canсel работает только при отмене записи? как например отменить Insert в Before Insert? Либо я что-то напутал, либо Canсel не подходит для этой цели.
Лед и Пламень

Лед и Пламень (статус: 1-ый класс), 23 июля 2009, 14:44 [#4]:

CANCEL как раз и отменяет при до POST. А как ты начал редактировать запись (append, edit, insert) не важно.

if (Query.state=dsEdit) or (Query.state=dsInsert) then .....
Mav3rick

Mav3rick (статус: Посетитель), 23 июля 2009, 14:53 [#5]:

procedure TForm1.Table1BeforePost(DataSet: TDataSet);
begin
if (Form1.DBGrid1.DataSource.DataSet.FieldByName('Number').AsInteger > 100) or (Form1.DBGrid1.DataSource.DataSet.FieldByName('Number').AsInteger < 1) then
begin
showmessage ('Number`s value is set between 1 and 100');
Form1.DBGrid1.DataSource.DataSet.Cancel;
end;
end;


при этом у меня спокойно вписывается любое число и ошибки не возникает, в процедуру программа даже не заходит
Лед и Пламень

Лед и Пламень (статус: 1-ый класс), 23 июля 2009, 15:03 [#6]:

У меня Ваш код работает. При попытке сохранить запись выдает это сообщение
Mav3rick

Mav3rick (статус: Посетитель), 23 июля 2009, 15:07 [#7]:

1чем вы редактируете? у меня стоит DBNavigator
2 мне нужно чтобы сообщение выдавалось как только юзер вставил в поле не то число и нажал enter , тогда число должно стереться(cancel , вот что я думал он делает) и вылезти ошибка(showmessage).
Mav3rick

Mav3rick (статус: Посетитель), 23 июля 2009, 15:25 [#8]:

Единственное, что делает в моей программе этот Cancel, так это создает еще одну идентичную данной строчку.
Лед и Пламень

Лед и Пламень (статус: 1-ый класс), 23 июля 2009, 16:15 [#9]:

Вместо
Form1.DBGrid1.DataSource.DataSet.Cancel;
попробуй просто Abort

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.02 сек.