Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FIBDataset и генераторы  [new]
RWolf
Member

Откуда: Казань
Сообщений: 392
FIBPlus, Firebird 2.5.
Настраиваю датасет для редактирования таблицы T1(ID, V). Хочу в новой записи заполнять поле ID значением генератора, поэтому пишу такое поле запроса InsertSQL:
INSERT INTO T1 (
  ID, 
  V
)
VALUES (
  GEN_ID(GEN_T1_ID, 1),
  :V
)


При попытке вставить запись наблюдаю такое содержимое грида:
Картинка с другого сайта.
При этом новое значение ID в таблицу попадает, некорректно только отображение поля в новой записи. При перезапуске программы запись показывается корректно (см. строки в таблице выше курсора).
В чём причина такого поведения?

Про TFIBDataSet.AutoUpdateOptions знаю, вызывать GEN_ID через него мне не подходит, т.к. при вставке записи требуется генерить больше одного поля.
8 ноя 18, 14:57    [21728244]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 46152

RWolf
В чём причина такого поведения?

В том, что ты делаешь отсебятину, компонентописателями не предусмотренную. Надо генерить -
генери. Ручками. В OnNewRecord.

Posted via ActualForum NNTP Server 1.5

8 ноя 18, 15:04    [21728259]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 97
RWolf,

см. TpFIBDataSet.AutoUpdateOptions.

https://github.com/madorin/fibplus/tree/master/Docs
8 ноя 18, 15:07    [21728270]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12484
А я так и не понял.
Нужно одним генератором заполнять два разных поля?
8 ноя 18, 15:29    [21728309]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
RWolf
Member

Откуда: Казань
Сообщений: 392
X11, нет, разные генераторы для разных полей.
Я рассчитывал на то, что датасет после коммита пишущей транзакции читает новую запись, но, видимо, нет — придётся вызывать генераторы вручную.
8 ноя 18, 15:34    [21728316]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 97
X11
А я так и не понял.
Нужно одним генератором заполнять два разных поля?

У него генератор жестко забит в текст запроса, но отсутствует returning. Ни трусов, ни крестика.
Пусть доку читает.
8 ноя 18, 15:45    [21728330]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 27622
RWolf,

команда insert ушла на сервер, генератор вызвался, значение записалось.
Кто теперь знает вставленное значение генератора? Никто, потому что при обычном insert/update сервер ничего не возвращает (кроме ok/error).
Как тут уже сказали, для появления записи в правильном месте значение генератора надо сначала получить с сервера, а потом использовать его ПЕРЕД отправкой записи (insert) на сервер.
Или, надо чтобы компоненты понимали insert returning.
8 ноя 18, 16:12    [21728360]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
Док
Member

Откуда: Казань
Сообщений: 5840
kdv
надо чтобы компоненты понимали insert returning.

ФИБы их прекрасно понимают, Дим. Это ТС доку не читает, а делает все по наитию :)
8 ноя 18, 18:24    [21728561]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 27622
Док,

дык, чтобы вернулось значение, надо чтобы было написано insert returning, а значит надо понимать, как работает клиент-сервер, что такое буфер датасета, и как перечитываются в нем записи.
Так что, можно констатировать отсутствие наития :-)
9 ноя 18, 00:42    [21728925]     Ответить | Цитировать Сообщить модератору
 Re: FIBDataset и генераторы  [new]
RWolf
Member

Откуда: Казань
Сообщений: 392
RETURNING решил проблему, теперь можно убрать отдельный запрос к генератору. Спасибо за наводку.
9 ноя 18, 10:31    [21729067]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить