Непонятная ошибка при постинге

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
sts
Сообщения: 20
Зарегистрирован: 10 янв 2006, 21:06

Непонятная ошибка при постинге

Сообщение sts » 28 фев 2006, 20:38

Вот уперся рогами-помогите, кто знает... Короче есть 2 таблицы со сведениями о клиентах-одна с основной инфой (ФИО и тп) а другая - с кучей дополнительной. Для удобства хочу связать их как мастер-деталь. Ограничение вторичного ключа на уровне базы не прописывалось, значение втор.ключа вставляется во вторую таблицу по IBDataset2.BeforePost. В обоих - первичные ключи с автоинкрементом (через GeneratorField/On New Record). Постинг сделан по нажатию одной кнопки(сначала-1-й потом 2-й таблицы).
И все замечательно работает, пока не ввожу связь мастер-деталь(указ. 1-ю датасурсу для 2-й IBDataset, в SelectSQL добавил "where FKey=:MKey". Вызываю для обоих таблиц метод APPEND, ввожу данные в DBEditы, и при нажатии на кнопку "Post" вылазит "IBDataset2 not in edit or insert mode" !
Вопрос: а при чем тут edit or insert mode? В какой момент Датасет2 вылез из режима вставки? P.S. Просьба не учить, как это обойти (уже сделано), а ПОЧЕМУ так (похоже я что-то недопонимаю)?

LDF
Сообщения: 2
Зарегистрирован: 01 мар 2006, 00:20

Сообщение LDF » 01 мар 2006, 00:28

вторая транз. не видит изменений первой. а первая только начала и не подтвердила данные (создала ИД-MKey).
Решение же в том было, что сначала постится первая, а потом вносятся вторая? Так?

sts
Сообщения: 20
Зарегистрирован: 10 янв 2006, 21:06

Сообщение sts » 01 мар 2006, 09:43

LDF писал(а):вторая транз. не видит изменений первой. а первая только начала и не подтвердила данные (создала ИД-MKey).
Решение же в том было, что сначала постится первая, а потом вносятся вторая? Так?
--------
Да нет, транзакция там одна на всех, и таблица в-общем одна по-смыслу, я ее разбил на 2 для удобства просмотра данных.
IBDataset1.Append;IBDataset2.Append;
<Заполняются данные в обоих таблицах>
IBDataset1.Post;IBDataset2.Post;
-и все работает, пока не добавлю связь мастер-деталь. Вот тогда и кричит, что второй датасет не в режиме изменений (так оно и есть- если перед вторым постингом тупо добавить Dataset2.Edit, то все нормально) Вопрос в том , где он вылез из dsInsert и почему?

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 01 мар 2006, 13:28

Где? В момент IBDataset1.Post.
Почему? Из-за связи. Запись в мастере сменилась -> детайл обновился, попутно запостив изменения.
Кто такую кривизну написал? Не знаю, Джеф, наверное...

sts
Сообщения: 20
Зарегистрирован: 10 янв 2006, 21:06

Сообщение sts » 02 мар 2006, 09:49

Dimitry Sibiryakov писал(а):Где? В момент IBDataset1.Post.
Почему? Из-за связи. Запись в мастере сменилась -> детайл обновился, попутно запостив изменения.
Кто такую кривизну написал? Не знаю, Джеф, наверное...
Значит, полноценная связь М-Д включается просто ссылкой на мастер-датасурсу и всё? (Ну да, в IB -я полный чайник, вот пытаюсь разобраться). Кстати, подскажите в каком инетмагазине можно заказать ту самую книжку Хелен по FB-не хватает инфы жутко, особенно на русском:)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 мар 2006, 09:55

в каком инетмагазине можно заказать ту самую книжку
books.ru, bolero.ru
выбери по цене, обязательно учитывай цену доставки. на ozon.ru вроде дороже.

Ответить