Страница 1 из 1

Извлечение rdb$db_key firebird 1.5

Добавлено: 20 июл 2012, 14:34
0xfceron
Здравствуйте уважаемые форумчане!
Каким образом можно получить rdb$db_key в firebird 1.5?

Код: Выделить всё

select rdb$db_key, n_inv, k_oper, data_oper from tb_mat_cen
А именно обработать, вставить это значение какую либо таблицу бд или обработать при помощи какой либо udf'ки или получить rdb$db_key в Delphi.
В IBExpert'e выборка происходит отлично и можно увидеть значение rdb$db_key
Но вот когда начинаешь:
- копировать значение ячейки
- становишься мышкой на ячейку в режиме редактирования чтобы скопировать находящийся там текст
- экспортируешь результаты запроса в скрипт
- обращаешься через функцию или как либо обращаешься к rdb$db_key при выборке, хотя бы достать макс. значение
то он показывает какой либо один символ в основном кракозябрик.
Я понимаю, что возможно редко кто пользуется rdb$db_key (в нете, встречаются примеры для удаления дубликатов), но на данный момент это является единственным выходом определить среди одинаковых записей, именно ту запись которая insert'илась последней.

А данные следующего вида, есть Материальные ценности, в которых следует определить последнюю операцию выполненную с мат.ценностью. Ее как я понял можно получить в моем случае только по rdb$db_key.

Код: Выделить всё

+--------+--------------------------------+-------------------------------------------------------+---------------+
| DB_KEY | Инвентарный номер мат.ценности | Код операции (приобретение, списание, передача, ... ) | Дата операции |
+--------+--------------------------------+-------------------------------------------------------+---------------+
| 14:24  | 001                            | 1                                                     | 12.01.2011    |
| 14:89  | 001                            | 2                                                     | 12.01.2011    |
| 14:56  | 001                            | 31                                                    | 12.01.2011    |
| ...    | ...                            | ..                                                    | ..            |
+--------+--------------------------------+-------------------------------------------------------+---------------+
В данной таблице вторая строчка с значением "DB_KEY 14:89", является последней вставленной, она как раз таки мне и нужна)
Я перешарил весь нэт, UDF'ку написал) думал мож удастся вытащить и обработать как либо, но нет, сегодня только понял что UDF дохлый номер.
Прошу Вас, подсказать какие еще варианты есть для того чтобы достать значение rdb$db_key ? Возможно есть какие либо варианты? :)

Re: Извлечение rdb$db_key firebird 1.5

Добавлено: 20 июл 2012, 14:56
Dimitry Sibiryakov
Добавь к имеющейся дате время с точностью до микросекунд и ты получишь гораздо более надёжный критерий. Или заведи поле, заполняемое из последовательности. db_key не всегда монотонно возрастает. Точнее сказать - почти никогда.

Re: Извлечение rdb$db_key firebird 1.5

Добавлено: 20 июл 2012, 15:02
0xfceron
Dimitry Sibiryakov писал(а):Добавь к имеющейся дате время с точностью до микросекунд и ты получишь гораздо более надёжный критерий. Или заведи поле, заполняемое из последовательности. db_key не всегда монотонно возрастает. Точнее сказать - почти никогда.
Спасибо за совет Дмитрий, подобную идею уже реализовал недавно, с учетом времени у даты. Но данные в отчет начиная с 2005 года, все таки надо извлечь с кодом последней операции.

Re: Извлечение rdb$db_key firebird 1.5

Добавлено: 20 июл 2012, 15:56
hvlad
0xfceron писал(а):это является единственным выходом определить среди одинаковых записей, именно ту запись которая insert'илась последней
Никто не гарантирует монотонное возрастание db_key, если в таблице бывают update\delete

Re: Извлечение rdb$db_key firebird 1.5

Добавлено: 20 июл 2012, 15:58
hvlad
0xfceron писал(а):Прошу Вас, подсказать какие еще варианты есть для того чтобы достать значение rdb$db_key ? Возможно есть какие либо варианты? :)
Обычное поле CHAR(8) OCTETS, какие проблемы ?

Re: Извлечение rdb$db_key firebird 1.5

Добавлено: 21 июл 2012, 11:49
0xfceron
Всем спасибо, решил при помощи UDF'ки исходник тут http://pastebin.mozilla-russia.org/110232, а вообще мягко сказать "не сообразил" при объявлении функции. А точнее как сказано вот здесь http://www.ibase.ru/devinfo/udf_ok.htm "все передаваемые в UDF параметры всегда передаются по ссылке, т.е. должны быть объявлены как var или как указатели."
Вопрос исчерпан, тема может быть закрыта.