Таблицу со строковым первичным ключем подключить к визуальным контролам Гедымина нельзя, так как все они поголовно спроектированы для работы с целочисленными идентификаторами. Выход -- добавить вычисляемую колонку в запрос, которую заполнять хэшем от строкового значения. Встроенная функция Firebird HASH() возвращает 64-х битное целое (тип BIGINT), которое следует сдвигать вправо, пока значение не войдет в допустимый для 32-х битных целых диапазон.
В следующем примере мы генерируем ключи типа INTEGER по наименованиям контактов (что не совсем корректно, так как сами наименования у нас могут быть неуникальными).
select
cast(iif(log(2, hash(name)) > 30,
bin_shr(hash(name),
cast(log(2, hash(name)) as integer) - 30),
hash(name)) as integer),
name
from
gd_contact
В некоторых случаях может подойти и заполнение колонки последовательными значениями генератора:
select
gen_id(my_gen, 1),
name
from
gd_contact
Комментариев нет:
Отправить комментарий