| 
| 
 | Вопрос # 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
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |