Вопросы по структуре базы данных. Построение SQL запросов для извлечения нужной информации. Обсуждение возможностей сервера Interbase/Firebird/Yaffil.

Формирование идентификатора

Сообщение gavryl » 06 дек 2018, 09:06

Здравствуйте.
Интересует вопрос формирования идентификатора записей в базе данных для Бизнес-классов, в особенности "TgdcAttrUserDefained" и "TgdcUserDocument".
Как он формируется? Как он должен формироваться?

Есть необходимость формирования идентификатора с помощью SQL запроса.
gavryl
Newbie
 
Сообщения: 19
Зарегистрирован: 31 окт 2011
Откуда: г. Брест

Re: Формирование идентификатора

Сообщение sysdba » 07 дек 2018, 15:30

1. TgdcAttrUserDefined -- базовый класс для справочников, созданных пользователем. Подтип у него -- это имя таблицы справочника.

2. TgdcUserDocument -- базовый класс для документов пользователя. Подтип у него это РУИД типа документа, который можно отыскать в таблице GD_DOCUMENTTYPE.
sysdba
Monster
 
Сообщения: 1242
Зарегистрирован: 17 янв 2005

Re: Формирование идентификатора

Сообщение gavryl » 09 дек 2018, 15:08

Судя по ответу, я не правильно задал вопрос. Попробую по другому.

Например. Возьмём бизнес-класс TgdcValue (справочник Единиц измерения). Главной (и единственной) таблицей является таблица GD_VALUE. Судя по триггеру этой таблицы идентификатор формируется согласно двум генераторам: "NEW.ID = GEN_ID(gd_g_unique, 1) + GEN_ID(gd_g_offset, 0)". Причём первый генератор каждый раз увеличивается на единицу, а второй сам по себе равен нулю и не изменяется.

Если я выполню запрос: "Insert Into gd_Value (Name) Values ('ИмяЕдИзм')", то так и произойдёт, а именно:
генератор gd_g_unique увеличится на единицу и результат запишется в поле id таблицы gd_Value.
Но если я открою как пользователь таблицу "Единицы измерения" и в ней добавлю строчку, то поле id приобретёт совсем другое, но близкое к генератору gd_g_unique значение. При чём генератор gd_g_unique никак не измениться.
Это же происходит и в TgdcAttrUserDefined, и в TgdcUserDocument, и, скорее всего, и во всех Бизнес-объектах.
При этом идентификаторы сформированные в бизнес-объектах не повторяются.

Почему в Бизнес-классе идентификатор другой?
Или я уже что-то "нахимичил" :) с базой данных?

*.ехе файл у меня конца 2012 года. Версия файла БД: 0000.0001.0000.0193
gavryl
Newbie
 
Сообщения: 19
Зарегистрирован: 31 окт 2011
Откуда: г. Брест

Re: Формирование идентификатора

Сообщение sysdba » 11 дек 2018, 15:52

Значение генератора кэшируется для скорости, чтобы не дергать базу каждый раз, когда создается объект. Поэтому при создании объекта из Гедымина он получает ИД из кэша.
sysdba
Monster
 
Сообщения: 1242
Зарегистрирован: 17 янв 2005

Re: Формирование идентификатора

Сообщение gavryl » 11 дек 2018, 16:48

А к ИД из кэша с помощью запроса я не доберусь...?
gavryl
Newbie
 
Сообщения: 19
Зарегистрирован: 31 окт 2011
Откуда: г. Брест

Re: Формирование идентификатора

Сообщение sysdba » 11 дек 2018, 17:22

нет, а зачем вам? если в макросе надо получить следующее значение ИД, то там есть функция GetNextID.
sysdba
Monster
 
Сообщения: 1242
Зарегистрирован: 17 янв 2005

Re: Формирование идентификатора

Сообщение gavryl » 12 дек 2018, 10:00

Просто мне нужно работать с базой данных удалённо. Изменять или записывать в ней некоторые данные. Обычное подключение не получается (подключение происходит через интернет). Долго грузит поля таблиц. Подождал десять минут и завершил задачу. Хотя когда-то мне приходилось организовывать подключение даже с помощью обычного модема, - работали некоторое время.
Подключение через удалённый рабочий стол не подходит. Требует много ресурсов. Рассматривается как крайняя мера.
Остаётся пользоваться запросами с помощью класса TIBSQL или TIBQuery.

А чтобы решить вопрос с идентификаторами в удалённой базе данных, нужно чтобы никто не подключался к ней обычным способом, а только удалённо.

Благодарю за помощь.
gavryl
Newbie
 
Сообщения: 19
Зарегистрирован: 31 окт 2011
Откуда: г. Брест

Re: Формирование идентификатора

Сообщение sysdba » 12 дек 2018, 10:02

Странно, что у вас не получается с удаленными столами. Это обычная схема, которую используют наши клиенты через одного.
sysdba
Monster
 
Сообщения: 1242
Зарегистрирован: 17 янв 2005

Re: Формирование идентификатора

Сообщение gavryl » 12 дек 2018, 10:10

С удалёнными столами получается. Но, нужно шаманить с операционкой.
Да и по другим соображениям не хочется использовать рабочие столы.
gavryl
Newbie
 
Сообщения: 19
Зарегистрирован: 31 окт 2011
Откуда: г. Брест

Вернуться в База данных