Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TFibDataSet обмирает OnSetText


DelphiLexx ©   (2006-07-27 17:32:00) 

В FibDataSet'е на определенное поля наложен обработчик события OnSetText в котором ведется проверка вводимых данных.

if Text = (определенный критерий) then
   Sender.AsFloat := Text;
   FibDataSet.Post;
 else
   MessageBox(Self.Handle, 'Не правильно введены данные', 'Ошибка', MB_ICONERROR or MB_OK)

Проблема в том, что после того как пользователь ввел данные и нажамал Enter поле все равно остается в режиме редактирования.
Как с этим бороться?


ЮЮ   (2006-07-28 11:35:00) [1]


> Если не предпринять дополнительных телодвижений...

Если до этого не предпринять дополнительных телодвижений по кэшированию изменений в DataSet-е. Хотя с FibDataSet-ом, признаюсь, на знаком


Johnmen   (2006-07-28 10:01:00) [2]


> ЮЮ ©   (28.07.06 09:34) [9]
> >  FibDataSet.Post;
> На кой нужно после изменения каждого поля записывать изменения
> в базу?


Строго говоря, после поста изменения в базу не пишутся. Если не предпринять дополнительных телодвижений...


ЮЮ   (2006-07-28 09:34:00) [3]


> //потвержаем внесенные изменения


>  FibDataSet.Post;


На кой нужно после изменения каждого поля записывать изменения в базу?

Достаточно вызвать Exception, если данные некорректны


DelphiLexx   (2006-07-28 09:29:00) [4]


> if (Sender as TStringField).Value<>'конкрентное условие'
> then
>  raise Exception.Create('Пургу гоним, товарищЬ!')

Так как тут подтвердить или отменить внесенные данные.
Мне нужно вот так:

 if (Sender as TStringField).Value = 'конкрентное условие'
 then
  //потвержаем внесенные изменения
 else
  //изменения не вносятся


ЮЮ   (2006-07-28 09:25:00) [5]

Sender.AsString := Text;

А точно параметр в обработчике так называется?
А то у TField свойсто Text, и если в коде именно оно, то возможна бесконечная рекурсия.

Отладчик для чего дан?


Виталий Панасенко   (2006-07-28 09:22:00) [6]


> DelphiLexx ©   (28.07.06 08:47) [3]
>
> > А OnValidate тогда зачем придумали ?
>
> В него не передается Text.

Ты это сУрьезно ? Но зато туда передается Sender : TField, который можно привести к любому необходимому типу поля
if (Sender as TStringField).Value<>'конкрентное условие' then
 raise Exception.Create('Пургу гоним, товарищЬ!')


Johnmen   (2006-07-28 09:07:00) [7]

проверка вводимых данных обычно делается в других местах
напр. в BeforePost


DelphiLexx   (2006-07-28 08:48:00) [8]


> И че, компилятор ничего не говорит ?

Sender.AsString := Text;


DelphiLexx   (2006-07-28 08:47:00) [9]


> А OnValidate тогда зачем придумали ?

В него не передается Text.


PEAKTOP   (2006-07-27 19:14:00) [10]


>   .........
>    Sender.AsFloat := Text;
>   .........

И че, компилятор ничего не говорит ?


Виталий Панасенко   (2006-07-27 18:02:00) [11]

А OnValidate тогда зачем придумали ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо