Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2010, 19:49   #1
vuzhakov
Новичок
Джуниор
 
Аватар для vuzhakov
 
Регистрация: 26.04.2010
Сообщений: 6
По умолчанию Не отображается автоинкрементация при добавлении записи

База создана на основе FireBird v2.5 с помощью IBExpert в Delphi 10
Подключение через :
драйвер ODBC FireBird|InterBase(r) driver -> ADOConnection -> DbQuery -> DataSource -> DBGrid.


Состоит из трёх таблиц, в одной из которых присутствуют ключевые поля оставшихся двух, в качестве внешних ключей.
Для ключевых полей каждой таблицы в IBExpert создан триггер автоинкрементации (причём BEFORE INSERT), использующий созданные там же генераторы.

При добавлении записи в IBExpert автоинкрементация работает отлично.
Когда же я делаю то же самое в главной таблице в Delphi ,с помощью тыканья кнопки + на DBNavigator , в ключевом поле записи ничего не отображается.
Нажимаю "галочку" — транзакция завершается, но в ключевом поле стоит 0.
При этом свойство IsolationLevel у компонента ADOConnection выставлен в ilReadCommited.
Если же открыть базу и закрыть снова — все ключевые поля записей, созданных через DBNavigator у которых в DBGrid ранее отображался ноль при создании, теперь имеют вполне кошерный номер.
Есть ли какой-то менее "тотальный" метод обновить автоинкрементирующиеся значения без закрытия/открытия ADOConnection?

P.S.
Курсор на стороне клиента (на сторону сервера не могу выставить, но это уже другая история)
Высокомерие годится только на то, чтобы возвести крепостную стену, за которой прячутся сомнения и страх.
vuzhakov вне форума Ответить с цитированием
Старый 26.04.2010, 20:13   #2
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

зачем используешь ADO?
для работы с Firebird/Interbase есть штатные IBX или одни из лучших компонентов доступа к FB/IB - FIBPlus... версия 6.9.9 как раз поддерживает D2010
dron-s вне форума Ответить с цитированием
Старый 26.04.2010, 20:40   #3
vuzhakov
Новичок
Джуниор
 
Аватар для vuzhakov
 
Регистрация: 26.04.2010
Сообщений: 6
По умолчанию

FIBPlus всё же платная, а я хотел сделать полностью бесплатный продукт по всем звеньям — от базы до оболочки
Высокомерие годится только на то, чтобы возвести крепостную стену, за которой прячутся сомнения и страх.
vuzhakov вне форума Ответить с цитированием
Старый 26.04.2010, 20:41   #4
dron-s
Форумчанин
 
Регистрация: 04.03.2007
Сообщений: 615
По умолчанию

тогда IBX тебе в руки
dron-s вне форума Ответить с цитированием
Старый 26.04.2010, 21:07   #5
vuzhakov
Новичок
Джуниор
 
Аватар для vuzhakov
 
Регистрация: 26.04.2010
Сообщений: 6
По умолчанию

Что-то я не могу понять, чем с вкладки InterBase подключиться к базе FireBird. Не выходит.
Высокомерие годится только на то, чтобы возвести крепостную стену, за которой прячутся сомнения и страх.
vuzhakov вне форума Ответить с цитированием
Старый 26.04.2010, 21:12   #6
vuzhakov
Новичок
Джуниор
 
Аватар для vuzhakov
 
Регистрация: 26.04.2010
Сообщений: 6
По умолчанию

Так. Вроде бы здесь аналог ADOConnection это IBDataBase.
Только не жрёт он мою базу FireBird.

Update 1:
Разобрался с компонентами IB (мои извинения за проявленную торопливость) — сейчас пробую.
Высокомерие годится только на то, чтобы возвести крепостную стену, за которой прячутся сомнения и страх.

Последний раз редактировалось vuzhakov; 26.04.2010 в 21:43.
vuzhakov вне форума Ответить с цитированием
Старый 26.04.2010, 22:28   #7
bezOn
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 51
По умолчанию

Цитата:
Сообщение от vuzhakov Посмотреть сообщение
...Для ключевых полей каждой таблицы в IBExpert создан триггер автоинкрементации (причём BEFORE INSERT)...
Этот метод не очень надежен. Если таблица каким-то образом испортится и понадобится ее пересобрать, автоинкрементные поля будут перенумерованы.
bezOn вне форума Ответить с цитированием
Старый 26.04.2010, 22:33   #8
bezOn
Пользователь
 
Регистрация: 14.04.2010
Сообщений: 51
По умолчанию

Цитата:
Сообщение от vuzhakov Посмотреть сообщение
Разобрался с компонентами IB (мои извинения за проявленную торопливость) — сейчас пробую.
Также внимательно посмотри на компонент "IBStoredProc"

Этой компоненте можно назначить "генератор" и потом в процессе вставки записи, используя метод ExecProc получить с генерированный ID.

Вот здесь я показывал работу IBStoreProc

Последний раз редактировалось bezOn; 26.04.2010 в 22:36.
bezOn вне форума Ответить с цитированием
Старый 27.04.2010, 05:58   #9
vuzhakov
Новичок
Джуниор
 
Аватар для vuzhakov
 
Регистрация: 26.04.2010
Сообщений: 6
По умолчанию

Цитата:
Этот метод не очень надежен.
Мне в принципе теперь в голову не приходит, для чего бы я мог использовать такой триггер, раз уж при работе с программой нужно после записи каждого значения перезапускать набор данных.

Я-то по наивности полагал, что раз написано BEFORE INSERT значит before insert, а не как бог на душу положит -)
Высокомерие годится только на то, чтобы возвести крепостную стену, за которой прячутся сомнения и страх.

Последний раз редактировалось vuzhakov; 27.04.2010 в 06:01.
vuzhakov вне форума Ответить с цитированием
Старый 27.04.2010, 05:59   #10
vuzhakov
Новичок
Джуниор
 
Аватар для vuzhakov
 
Регистрация: 26.04.2010
Сообщений: 6
По умолчанию

За компонент спасибо — поковыряю его.

Цитата:
Этой компоненте можно назначить "генератор"
Кстати, генератор-то использовать можно созданный ранее для триггера?
Высокомерие годится только на то, чтобы возвести крепостную стену, за которой прячутся сомнения и страх.

Последний раз редактировалось vuzhakov; 27.04.2010 в 06:02.
vuzhakov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
делфи ругается при добавлении записи Cannibal БД в Delphi 8 23.04.2010 15:49
Событие при добавлении записи в BDGrid Alexeyss БД в Delphi 2 19.08.2009 23:37
Проверка при добавлении записи Tanya2008 БД в Delphi 3 22.04.2009 10:07
Проблема при добавлении в БД Oleg Romanchuk БД в Delphi 2 12.01.2009 12:21
при добавлении новой записи через форму подставлолось значение из другой таблицы Baxxter Microsoft Office Access 1 07.01.2009 22:23