Не видно записи после вставки из программы

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
_kolyan
Сообщения: 7
Зарегистрирован: 31 окт 2005, 22:07

Не видно записи после вставки из программы

Сообщение _kolyan » 20 фев 2006, 22:23

Возникла проблема. Есть ли особенности сервера, которые могут объяснить такое поведение или все дело в моем глупом коде.
(Delphi7,компоненты IBX + IB7.1 или FB 1.5)

1) Создаю базу из скрипта, автоматически сгенеренного IBExpert'ом. Этим же IBExpert'ом и создаю, собственно.
2) Имеется таблица, содержащая набор уникальных полей.
3) Из программы создаю запись вэтой таблице при помощи компонента TIBStoredProc и ***_IU процедуры, также сгенеренной IBExpert'ом. Перед этим вручную (вызовом GEN_ID при помощи TIBQuery) получаю значение первичного ключа и передаю в TIBStoredProc. Делаю COMMIT.
4) TIBDataSet подключенный к той же транзакции не показывает наличия записей. IBExpert также видит пустую таблицу.
5) Тем же путем повторно создаю запись с теми же значеними уникальных полей - получаю ошибку нарушения уникальности. DataSet и IBExpert по прежнему показывают пустую таблицу
6) Перезапускаю программу, таблица пустая но все добавления записей работают как задуманно. Тот же набор уникальных полей ошибки не вызывает и запись добавляется нормально.

Параметры транзакции read_committed;rec_version;nowait
У датасета CashedUpdates не стоит

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 21 фев 2006, 08:22

commit дядя будет делать?

_kolyan
Сообщения: 7
Зарегистрирован: 31 окт 2005, 22:07

Re: Не видно записи после вставки из программы

Сообщение _kolyan » 21 фев 2006, 08:47

_kolyan писал(а):Делаю COMMIT.
Топик дядя читать будет?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 21 фев 2006, 09:54

У тебя сколько ibtransaction в программе? И ВСЕ коммитишь? и после этого нет записей? Эт врядли.

_kolyan
Сообщения: 7
Зарегистрирован: 31 окт 2005, 22:07

Сообщение _kolyan » 21 фев 2006, 10:47

Ivan_Pisarevsky писал(а):и после этого нет записей? Эт врядли.
В это-то и проблема...
Транзакций конечно несколько, но работа с этой таблицей ведется только в контексте одной, остальные ее не трогают.

Опять же, если не делаю коммит, то чем последующие запуски программы отличаются от первого на новой базе с пустой таблицей.Потом-то все работает...

_kolyan
Сообщения: 7
Зарегистрирован: 31 окт 2005, 22:07

Сообщение _kolyan » 21 фев 2006, 10:52

В контексте той-же транзакции добавляется запись в другую таблицу, на которую первая(с которой проблемы) ссылается по FK. В этой второй таблице после соммита все видно отлично.
Какие-то могут быть косяки с FK-ограничением :?:

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

Сообщение kdv » 21 фев 2006, 16:18

косяки у тебя именно с транзакциями. Если делаешь commit, то все остальные read_committed увидят новые данные путем перечитывания.

www.ibase.ru/devinfo/ibx.htm

Gage
Сообщения: 18
Зарегистрирован: 26 ноя 2005, 20:17

Сообщение Gage » 27 фев 2006, 11:18

вызовом GEN_ID при помощи TIBQuery) получаю значение первичного ключа и передаю в TIBStoredProc
Покажи вызов.

Ответить