|
Вопрос # 3 028/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Как сделать в DBGrid поля обязательными для заполнения и задать возможный диапозон из значений(числовой)? Спасибо!
 |
Вопрос задал: Mav3rick (статус: Посетитель)
Вопрос отправлен: 23 июля 2009, 12:31
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Лед и Пламень
Ну грид для этого не предназначен.
Лучше конешно в СУБД, но если уж хочешь в клиенте, то обрабатывай свойство BeforePost своего набора данных (Ttable, TQuery или кто там у тебя)
 |
Ответ отправил: Лед и Пламень (статус: 1-ый класс)
Время отправки: 23 июля 2009, 13:06
Оценка за ответ: 5
Комментарий к оценке: Спасибо
|
Мини-форум вопроса
Всего сообщений: 9; последнее сообщение — 23 июля 2009, 16:15; участников в обсуждении: 2.
|
Mav3rick (статус: Посетитель), 23 июля 2009, 13:37 [#1]:
вот только не beforePost , а AfterPost
|
|
Лед и Пламень (статус: 1-ый класс), 23 июля 2009, 14:09 [#2]:
Нет. AfterPost возникает ПОСЛЕ того как данные записаны в БД. тут уже поздо.
А beforePost возникает ДО записи, и есть возможность проконтролировать и отменить ввод данных в БД
|
|
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 (статус: Посетитель), 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 (статус: Посетитель), 23 июля 2009, 15:07 [#7]:
1чем вы редактируете? у меня стоит DBNavigator
2 мне нужно чтобы сообщение выдавалось как только юзер вставил в поле не то число и нажал enter , тогда число должно стереться(cancel , вот что я думал он делает) и вылезти ошибка(showmessage).
|
|
Mav3rick (статус: Посетитель), 23 июля 2009, 15:25 [#8]:
Единственное, что делает в моей программе этот Cancel, так это создает еще одну идентичную данной строчку.
|
|
Лед и Пламень (статус: 1-ый класс), 23 июля 2009, 16:15 [#9]:
Вместо
Form1.DBGrid1.DataSource.DataSet.Cancel;
попробуй просто Abort
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|