|
|
|
FIBDataset и генераторы
|
|||
|---|---|---|---|
|
#18+
FIBPlus, Firebird 2.5. Настраиваю датасет для редактирования таблицы T1(ID, V). Хочу в новой записи заполнять поле ID значением генератора, поэтому пишу такое поле запроса InsertSQL: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. При попытке вставить запись наблюдаю такое содержимое грида: При этом новое значение ID в таблицу попадает, некорректно только отображение поля в новой записи. При перезапуске программы запись показывается корректно (см. строки в таблице выше курсора). В чём причина такого поведения? Про TFIBDataSet.AutoUpdateOptions знаю, вызывать GEN_ID через него мне не подходит, т.к. при вставке записи требуется генерить больше одного поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 14:57 |
|
||
|
FIBDataset и генераторы
|
|||
|---|---|---|---|
|
#18+
RWolfВ чём причина такого поведения? В том, что ты делаешь отсебятину, компонентописателями не предусмотренную. Надо генерить - генери. Ручками. В OnNewRecord. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 15:04 |
|
||
|
FIBDataset и генераторы
|
|||
|---|---|---|---|
|
#18+
А я так и не понял. Нужно одним генератором заполнять два разных поля? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 15:29 |
|
||
|
FIBDataset и генераторы
|
|||
|---|---|---|---|
|
#18+
X11, нет, разные генераторы для разных полей. Я рассчитывал на то, что датасет после коммита пишущей транзакции читает новую запись, но, видимо, нет — придётся вызывать генераторы вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 15:34 |
|
||
|
FIBDataset и генераторы
|
|||
|---|---|---|---|
|
#18+
X11А я так и не понял. Нужно одним генератором заполнять два разных поля? У него генератор жестко забит в текст запроса, но отсутствует returning. Ни трусов, ни крестика. Пусть доку читает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 15:45 |
|
||
|
FIBDataset и генераторы
|
|||
|---|---|---|---|
|
#18+
RWolf, команда insert ушла на сервер, генератор вызвался, значение записалось. Кто теперь знает вставленное значение генератора? Никто, потому что при обычном insert/update сервер ничего не возвращает (кроме ok/error). Как тут уже сказали, для появления записи в правильном месте значение генератора надо сначала получить с сервера, а потом использовать его ПЕРЕД отправкой записи (insert) на сервер. Или, надо чтобы компоненты понимали insert returning. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 16:12 |
|
||
|
FIBDataset и генераторы
|
|||
|---|---|---|---|
|
#18+
kdvнадо чтобы компоненты понимали insert returning. ФИБы их прекрасно понимают, Дим. Это ТС доку не читает, а делает все по наитию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2018, 18:24 |
|
||
|
FIBDataset и генераторы
|
|||
|---|---|---|---|
|
#18+
Док, дык, чтобы вернулось значение, надо чтобы было написано insert returning, а значит надо понимать, как работает клиент-сервер, что такое буфер датасета, и как перечитываются в нем записи. Так что, можно констатировать отсутствие наития :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2018, 00:42 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39730099&tid=2040149]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
187ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 455ms |

| 0 / 0 |
