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

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

IBDataSet [D5, Firebird]


Страницы:   1 2

jack128 ©   (2003-09-22 23:59:00) 

есть таблица адресов
id integer,
name varchar(255),
parent_id integer,
children_count integer //это поле вычисляется в тригере
и есть ibdataset с такими параметрами

selectSQL select * from ADDRESSES
insertSQL insert into ADDRESSES
(id, name, parent_id) values (:ID, :NAME, :PARENT_ID)
у датасета определено событие before insert
procedure TForm1.IBDataSet1BeforeInsert(DataSet: TDataSet);
begin
// функция
Dataset.FieldByName("id").AsInteger := GetId;
end;
для вывожу эту таблицу в grid и пытаюсь добавить запись, если я не заполняю поле id, то возникает ошибка
field "id" must have value. Видимо дело в том что ibdataset сначало тестирует присвоно ли полю значение и только потом вызывает onbeforeinsert..
Как это побороть??


Johnmen   (2003-09-23 09:46:00) [21]

Я предпочитаю OnNewRecord.


kaif   (2003-09-23 01:51:00) [22]

TIBDataSet сначала вызывает проверку на NOT NULL, а затем уже BeforePost. Чтобы побороть это нужно Required := False в свойствах поля ID поставить.

BeforeInsert юзать бессмысленно, так как это событие возникает еще даже до перехода в режим Insert. Вместо этого нужно юзать AfterInsert.

Попробуй переписать текст обработчика в событие AfterInsert.
Странно, что в BeforeInsert он у тебя не вызывает ошибки "DataSet is not in edit mode"...

Вообще не нужно путать BeforeInsert датасета с логикой триггеров IB BEFORE INSERT. Триггеры срабатывают перед вставкой в таблицу, а событие датасета - перед добавлением строки в набор. Добавление строки в таблицу произойдет после вызова метода Post. Тогда и сработает InsertSQL.

Датесет имеет режимы State: dsBrowse, dsInsert, dsEdit. В режиме просмотра (dsBrowse) поля не редактируются. В двух других режимах - редактируются. В режимах dsInsert, dsEdit можно вызывать метод Post. Вот он и делает реально всю работу по посылке соответствующего SQL-запроса.


Страницы:   1 2

Наверх

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