Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.19;
Скачать: CL | DM;

Вниз

OnSetText Глюк или реальность?   Найти похожие ветки 

 
Bless ©   (2006-09-18 11:22) [0]

Описание непонятного мне поведения:
есть ADODataSet -> datasource -> dbgrid
dataset настроен на таблицу, у которой есть NOT NULL поле xxx (или поля) и еще какое-нибудь поле без ограничений yyy.
Если попробовать в гриде добавить новую запись, заполнить в этой записи yyy и сделать Post (сдвинувшись на предыдущую запись), то возникает ошибка типа "поле xxx не позволяет Null-значения". Это нормальное поведение.
Если же повесить на field yyy ADODataset-a обработчик OnSetText (с любым содержимым, например просто "//" между begin - end) и проделать все то же самое, то ошибка не выскакивает (правда, и новая запись не добавляется, она просто пропадает)!

Это нормально?


 
Виталий Панасенко   (2006-09-18 11:47) [1]

А не пробовал тоже самое делать в OnNewRecord ?


 
sniknik ©   (2006-09-18 11:48) [2]

ну ты же подменяеш стандартный обработчик записи значения в поле, чего тогда ждеш исключения если ты сам его не возбуждаеш -> "просто "//" между begin - end"?
а в стандартном оно наверняка есть.


 
sniknik ©   (2006-09-18 11:55) [3]

попробуй вместо //
procedure TForm1.ADODataSet1DSetText(Sender: TField; const Text: String);
begin
 Sender.AsString:= Text;
end;


 
Bless ©   (2006-09-18 12:00) [4]

Все понял, прошу прощения, все логично.
Отсутствие исключения нормально, т.к. я ничего полю в обработчике не присваивал, а следовательно, вообще новую запись не редактировал, а  значит никаких post в базу реально не было.


 
Bless ©   (2006-09-18 12:10) [5]


> sniknik ©   (18.09.06 11:55) [3]


Угу.
Просто сначала, не подсмотрев в DB.pas, я представлял, что это выглядит это приблизительно так:
procedure SetText(value)....
begin
 ...
 if assigned(FOnSetText) then FOnSetText(self, value);
//если value изменилось, то оно будет значение поля,
//если нет, то значением поля будет value переданное в SetText
 ...
end;

Т.е. я решил, что  этот обработчик вызывается внутри метода SetText. А оказалось, что вместо него.



Страницы: 1 вся ветка

Текущий архив: 2006.11.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
3-1157988551
*Ray*
2006-09-11 19:29
2006.11.19
Как по имени таблицы узнать имена полей?


15-1162275186
@!!ex
2006-10-31 09:13
2006.11.19
GetTickCount под досом


2-1162476030
strannik
2006-11-02 17:00
2006.11.19
помогите написать конкретное приложение


1-1160302078
andrewdr
2006-10-08 14:07
2006.11.19
Вопрос по потокам


15-1162041151
DillerXX
2006-10-28 17:12
2006.11.19
Все дружно поздравляем обладателя хорошего LCD монитора :о)