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..
Как это побороть??


jack128   (2003-09-24 13:13:00) [1]

Хотя все- вопрос закрыт...Помогла установка sp1 к d5 ;-)


jack128   (2003-09-24 12:41:00) [2]

А на пальцах не можешь объяснить как перекомпилировать IBX если нет .dpk файла??
Если все еще интресно - вот полное описание ошибки
Заголовок окна об ошибке "type IBCustomDataSet.TCachedUpdateStatus - IBCustomDataSet.pas"
Текст
"Точка входа в процедуру @Parentagesupport@Tsprig@FindItemByPath$qqrx17System@AnsiStringo не найдена в библиотеке DLL dsbide50.bpl"


Zacho   (2003-09-24 00:15:00) [3]

Я имею в виду: апдейт IBX установил ?

> При загрузке Delphi возникает ошибка не найдена точка входа
> в процедуру ля-ля-ля (название к сожелению не записал, но
> в нем символов 30-40)в пакете DCLIB50.bpl..

На всякий случай еще раз: это происходит потому, что у тебя в разных каталогах есть одноименные dcu, dcp, и/или bpl от разных версий IBX. Сотри лишние, а еще лучше - все сотри и перекомпилируй IBX.


jack128   (2003-09-23 23:58:00) [4]

Нету там ред ми..А при инсталяции на всякий случай бекап делается...Только нечем это не помогает...

> Ну как, проблему-то решил ?

см
> jack128 © (23.09.03 16:18) [8]


Zacho   (2003-09-23 23:45:00) [5]


> jack128 © (23.09.03 23:38) [17]
> У меня на винт бардак строго упорядочен ;-) И вообще update
> к IBX поставляется в виде setup.exe, я собсвенно его только
> запустил и все..

Перед запуском сетапа надо было полностью снести старый IBX. Насколько помню, это даже в ридми написано :)
Ну как, проблему-то решил ?


jack128   (2003-09-23 23:38:00) [6]


> Zacho © (23.09.03 22:32) [16]

У меня на винт бардак строго упорядочен ;-) И вообще update к IBX поставляется в виде setup.exe, я собсвенно его только запустил и все..


Zacho   (2003-09-23 22:32:00) [7]


> jack128 © (23.09.03 22:24) [15]

У тебя получилось несколько dcu, dcp или bpl разных версий. Сотри все и перекомпилируй пакет. И больше не допускай бардака на винте :)


jack128   (2003-09-23 22:24:00) [8]

Скачал. Установил. При загрузке Delphi возникает ошибка не найдена точка входа в процедуру ля-ля-ля (название к сожелению не записал, но в нем символов 30-40)в пакете DCLIB50.bpl..


kaif   (2003-09-23 18:44:00) [9]

2 jack128 © (23.09.03 18:12) [13]

Блин, точно...
Извини, я об этом не подумал.
Скачай обновление. В родной IBX D5 к тому же много глюков. Практика показала, что обновления IBX работают хорошо и есть смысл их ставить.


jack128   (2003-09-23 18:12:00) [10]


> У датасета (TIBDataSet и TIBQuery) есть свойство
мда...Надо мне обновление ibx скачать..У меня такого свойства нету...


kaif   (2003-09-23 17:51:00) [11]

2 jack128 © (23.09.03 16:18) [8]
У TintegerField нет свойства генератор (Generater)

Я написал Если свойство "генератор" датасетаправильно прописать.
У датасета (TIBDataSet и TIBQuery) есть свойство
GeneratorField (я его имел в виду) и PropertyEditor к нему. Так что можно в Object Inspector-е кнопочку нажать на GeneratorField и в окошке диалога указать:
1.Имя используемого генератора из выпадающего списка
2.Поле (ID), в которое нужно засунуть значение
2.Инкремент
3.Способ срабатывания (On New Record или On Post, например)

Я часто использую свойство GeneratorField и нахожу его очень удобным во всех отношениях. К тому же если это свойство заполнено, то проблема с Required не возникает.

Хотя если необходимо получать ID как-то иначе, то решение с BeforePost и отменой Required идеальное и я сам его часто использую, особенно для всяких lookup-полей, которые у меня как правило not null.


Johnmen   (2003-09-23 16:52:00) [12]

Так нормальный вариант. Если Required = False.
И kaif © вовсе не говорил, что он плохой...


jack128   (2003-09-23 16:47:00) [13]

А есть другие варианты? Так по крайней мере все работает...


Johnmen   (2003-09-23 16:39:00) [14]

>jack128 © (23.09.03 16:18)

Очень даже неправильный, т.к. не учитывает Required.


jack128   (2003-09-23 16:18:00) [15]


> Если свойство "генератор" датасета правильно прописать,
> то в холостую он запускаться не будет и никаких обработчиков
> тоже не потребуется

У TintegerField нет свойства генератор (Generater)

> а вообще проверка Required = True происходит до события
> BeforePost, поэтому совет неправильный.

Очень даже правильный. Все работает если обработчик повесить на OnBeforePost и у поля ID выставить Required = False;

Спасибо всем...


kaif   (2003-09-23 15:26:00) [16]

а вообще проверка Required = True происходит до событияBeforePost, поэтому совет неправильный.


kaif   (2003-09-23 15:25:00) [17]

Если свойство "генератор" датасета правильно прописать, то в холостую он запускаться не будет и никаких обработчиков тоже не потребуется.


Deniz   (2003-09-23 13:44:00) [18]

Можно еще BeforePost

if Dataset.FieldByName("id").IsNull then
Dataset.FieldByName("id").AsInteger := GetId;

и генератор в холостую не запускается.


MsGuns   (2003-09-23 12:36:00) [19]

А я предпочитаю все делать "по кнопкам"


kaif   (2003-09-23 12:27:00) [20]

2 Johnmen © (23.09.03 09:46) [2]
а я никогда не использовал OnNewRecord...
видимо проглядел это событие.:((
надо бы почитать, когда оно происходит и что делает...


Страницы:   1 2

Наверх

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