DBID

Материал из GedeminWiki
Перейти к: навигация, поиск

Уникальный идентификатор базы данных -- это целое положительное число большее нуля, которое хранится в генераторе gd_g_dbid. Чистая эталонная база данных, сгенерированная из скриптов, имеет нулевой идентификатор. При подключении к базе, Гедымин считывает и проверяет значение генератора и, если оно равно 0, -- формирует новый идентификатор. Формирование идентификатора происходит в методе GenerateNewDBID класса TgdcBaseManager. Его исходный код приведен ниже:

function TgdcBaseManager.GenerateNewDBID: Integer;
var
  D: TDateTime;
begin
  D := Abs(Now - EncodeDate(2003, 08, 06));
  while D > 10 * 365 do
    D := D - (10 * 365) + 0.5;
  Result := Round(D * 24 * 60 * 60 * 6.8) + 2000;
end;

Как видно, идентификатор базы данных -- это просто порядковый номер 6.8 секундного интервала начиная с 6 августа 2003 года. Каждые десять лет счетчик обнуляется. Учитывая, что наиболее вероятно создание новых баз данных в течение рабочего дня, при выходе за границы десятилетнего интервала прибавляется 12 часов (число 0.5). Таким образом уменьшается вероятность генерации неуникального идентификатора.

  • Идентификатор базы данных используется при формировании RUID объекта и, как правило, не меняется в течение жизни файла базы данных.
  • При создании копии существующей базы данных ей обязательно следует присвоить новый идентификатор. Для этого, при восстановлении базы данных из архива, следует установить флаг "Присваивать уникальный ИД базы".
  • Диапазон идентификаторов баз данных от 1 до 1999 включительно зарезервирован для системного использования. В частности, для РУИДов всех системных бизнес-объектов, идентификатор которых менее 147000000, DBID принимается равным 17.
  • Узнать идентификатор текущей базы данных можно на вкладке "База данных", окна "О программе", которое вызывается из меню "Справка" главного окна Гедымина.
  • Из макросов идентификатор текущей базы данных можно получить обратившись к свойству DBID глобального объекта IBLogin.
sub ShowDBID
  MsgBox "Current DBID: " & IBLogIn.DBID
end sub
  • Идентификатор текущей базы данных можно получить так же выполнив запрос:
SELECT GEN_ID(gd_g_dbid, 0) FROM rdb$database
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты